Ú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 návodu PROGRAMOVÉ VYBAVENÍ
TESLA ELTOS OBOROVÝ PODNIK | DIZ |
SAPI 1 |
Základní verze (JPR-1, AND-1, REM-1 s min. 2kB RAM nebo REM-1 a RAM-1, DSM-1, ANK-1)
Minimalistická verze s 1kB RAM (JPR-1, AND-1, DSM-1, ANK-1. RAM a EPROM osazené na JPR-1)
Minimalistická verze s 1kB RAM (JPR-1, AND-1, DSM-1, C259.11 nebo C262.3. RAM a EPROM osazené na JPR-1)
Programové vybavení SAPI-1 je dáno především dodávaným rozsahem paměti a to jak typu EPROM, tak i typu RAM. Protože obě jsou zatím omezené a protože počítač se dostane do rukou i lidem, kteří až dosud se žádným počítačem do styku nepřišli, byl jako základní programovací jazyk vybrán BASIC.
BASIC patří do skupiny vyšších programovacích jazyků a vznikl již před 20 léty. Za tu dobu byl přizpůsoben pro použití na mnoha různých počítačích a v nejrůznějších variantách, podle toho, kolik měli tvůrci k dispozici paměti pro vlastní jazyk a pro program - tedy kolik komfortu mohli budoucímu uživateli poskytnout. Mikro BASIC na počítači SAPI-1 patří do kategorie malých (tiny - drobný). Má omezení v rozsahu zpracovávaných čísel, jsou realizovány jen některé funkce a s textovými řetězci lze pracovat jen omezeně. Nemůlže rovněž pracovat se soubory dat. Na druhé straně však, právě díky těmto omezením je ve srovnání s jazyky BASIC pro větší počítače překvapivě rychlý.
Součástí programového vybavení je i MONITOR, který na rozdíl od větších počítačů má zde jen vedlejší funkci a to zejména práci se strojovým kódem. Počítač je postaven na bázi integrovaného obvodu MHB 8080 a využívá všechny jeho strojových instrukcí s vyjímkou RST 4 až RST 7.
Přes všechna omezení však lze na SAPI-1 dosáhnout velmi slušných výsledků, za které by se nemusel stydět smi daleko větší počítač.
Přejeme Vám mnoho úspěchů.
Klávesnice není v pravém smyslu slova klávesnicí, protože nemá "klávesy", je zcela hladká, a má místo toho jen vyznačená místa, jejichž stisknutím (jen o nějakou desetinu milimetru) lze vyvolat stejný efekt jako u normální klávesnice psacího stroje.
Obrázek klávesnice je v příloze. K němu je třeba dodat, že ke klávesnici patři ještě dvě indikační diody (LED), z nichž levá indikuje stisk klávesy SHIFT, pravá za normálních okolností nesvítí. Je označena ERR a indikuje případnou chybu.
Na pravém boku skřínky, v niž je klávesnice umístěna, jsou tři tlačítka, označená T, INT a RES. Tlačítko T je programovatelné, jak je ukázáno v jednom z příkladů v následujícím popisu. Tlačítko INT vyvolá přerušení běžícího programu, aniž by program byl touto činností narušen. Přerušeni jím vyvolané ovšem funguje jen při běhu programu, tedy ne v době, kdy počítač čeká na vstup dat (INPUT) nebo když čeká programově (WAIT). Tlačítko RES způsobí obnovu počátečního stavu jako při zapnutí počítače, program ve skutečnosti v paměti zůstane. Jak se na něj dostat je popsáno v příslušném odstavci.
Technický popis počítače SAPI-1 najdou zájemci v samostatné příručce. Kromě toho se lze více dozvědět jak o konstrukci, tak i o programovém vybavení v článcích od autora počítače, tj. od konstruktéra ing. Eduarda Smutného a programátora ing. Tomáše Smutného v časopise Amatérské rádio, řada B, č.l a 2, ročník 1983.
Těm, kdo se chtějí blíže seznámit s programovacím jazykem BASIC doporučujeme stejný časopis řady A. Zde byl v roce 1981 v číslech 2 až 11 postupně uveřejněn seriál "Programování v jazyce BASIC"; který napsali ing. Václav Kraus a Miroslav Háše. Ve stejném časopise se v řadě čísel zabývali programováním mikroprocesorů specielně pak programováním 8080. Jiná literatura v českém jazyce až dosud vydána nebyla.
POZNAMKA. Je-li v počítači použita deska REM-1, jsou všechny paměti umístěny zde. Program tedy musel být nově přeložen, takže v příkladech používané adresy v této situaci nejsou umístěny od 2000, ale od 4000.
obr.1 schéma klávesnice ANK-1
Mikro BASIC má řádkovou strukturu a na jedné řádce může být příkazů více, pokud je oddělíme dvojtečkou. Mikro BASIC lze použít ve dvou režimech: v režimu programovém a pak musí být každá řádka očíslována číslem od 1 do 32767. Druhý je přímý režim, kde se číslování nepoužívá.
Mikro BASIC je založen na používání jistého repertoáru tzv. klíčových slov, odvozených z angličtiny, která vyvolávají jednoznačnou činnost. Tato klíčová slova se rozdělují na příkazy a povely. Příkazy slouží jako programové instrukce a lze je použít ve výše zmíněných dvou režimech, Povely jsou prováděny vždy ihned a slouží k řízení činnosti počítače a nelze je zadávat v programu.
Mikro BASIC je schopen pracovat s celými čísly (tedy jen bez desetinné čárky) v rozmezí od - 32767 do + 32767. Je to dáno tím, že do dvou bytů (tj. 16 bitů) lze umístit jen takto velké číslo, protože jeden bit je užíván pro znaménko. Záporná čísla jsou vnitřně zobrazována jako dvojkový doplněk.
Operátor | Význam | Priorita |
+ | plus pro sčítání | 4 |
- | mínus jako znaménko | 1 |
- | mínus pro odčítání | 4 |
* | hvězdička pro násobení | 2 |
/ | lomítko pro děleni | 3 |
V aritmetických výrazech se provádí vyhodnocování podle priority zleva vpravo. Nejvyšší prioritu provedení má negace, dále násobení a poslední je sčítání a odčítání. Tuto prioritu lze změnit použitím závorek. Potom se postupuje zevnitř ven; tj. nejdříve se vyhodnocují vnitřní závorky a až po vyhodnocení všech výrazů uvnitř závorek se postupuje běžným způsobem. Připomínáme však již zde, že Mikro BASIC je celočíselný a že tedy neumí ani zaokrouhlovat. Vyšlo-li by tedy někde jako výsledek číslo s desetinným zlomkem nebo dokonce číelo menší než jedna, bude zbytek za desetinou čárkou prostě odříznut a v druhém případě dokonce bude výsledek nulový. Jestliže se pak takto upravené číslo použije dále např, k dělení, dojde k chybě, Ne vždy bude chyba ohlášena.
Operátor | Význam | |
> | větší než | |
< | menši než | |
= | rovná se | |
# | není rovno | |
>= | je větší nebo rovno | nelze přehodit |
<= | je menší nebo rovno | nelze přehodit |
Je-li splněna podmínka, nahradí interpret celý výraz hodnotou 1. Není-li splněna, hodnotou 0. Příslušný příkaz pro větvení programu pak tuto hodnotu zpracuje. Za pravdivý výsledek není považována pouze 1, ale jakékoli kladné číslo. Výsledky porovnání je tedy možno sčítat a násobit a nahrazovat tak chybějící operátory AND s OR,
Mikro BASIC dovoluje použít v programu celkem 26 jednoduchých proměnných. "Jméno" jednoduché proměnné je tvořeno vždy jedním písmenem abecedy, tedy A až Z. Hodnota každé proměnné může být v rozsahu -32767 až +32767 stejně jako všechna čísla v Mikro BASICu, Tyto proměnné existují v Mikro BASICu vždy, i když nejsou použity, Při inicializaci počítača tedy jazyka se nenulují a mohou mít libovolný obsah.
Indexovanou proměnnou má Mikro BASIC pouze jednu a označuje se znakem @ ,zvaným zavináč, Index v závorce za tímto znakem v rozsahu 0 až 32767 udává pořadové číslo prvku v poli této proměnné. Každý prvek tohoto pole může nabývat stejných hodnot jako jednoduchá proměnná a celé pole je umístěno od konce volné paměti pro program, Program a prvky indexované proměnné jsou tedy zapisovány proti sobě. Okamžik vzájemného střetu je hlídán a je hlášen výpisem SORRY.
Text uzavřený v příkazech PRINT LPRINT a INPUT v uvozovkách je běžným textovým řetězcem, Program takový řetězec jen uloží a v případě potřeby opět použije bez jakékoli změny. Končí-li příkaz zároveň s programovým řádkem, pak uzavírací uvozovka není třeba psát, jestliže by byla posledním znakem řádky. Textový řetězec je právě tak ukončen znakem konce řádky.
Textový operátor je vlastně přiřazením dekadického kódu hodnoty ASCII znaku, který je uzavřen mezi dvěma apostrofy. Příklady na použití jsou uvedeny dále.
Nenalezne-li interpret po ukončení řádku znakem CR na jeho začátku číelo, považuje jej za řádek, obsahující povel nebo příkaz, zadaný v přímém režimu, který má okamžitě provést. Na rozdíl od příkazů, které mohou být obsaženy v číslovených řádkách má Mikro BASIC několik dalších instrukcí, kterým se říká povely a ty jsou určeny pouze pro ovládání interpretu.
Povely nesmí být v řádkách, začínajících číslem a mohou jim předcházet jen mezery. Povel se rovněž ukončuje znakem CR.
Tento povel slouží v základním tvaru k výpisu textu programu na displeji. Vypíše se samozřejmé pouze program, který jste tam před tim zapsali z klávesnice nebo jako hotový program zavedli z kazetového magnetofonu. Ve tvaru LLIST se provede totéž, avšak pomocí tiskárny. Tiskárnu většinou mít ještě nebudete, ale povel již tu je.
Protože se tento povel hojně používá, má pro něj Mikro BASBIC zkratku, kterou je obyčejná tečka.
Jako parametr příkazu je možno i zde zadat číslo programové řádky, kde má výpis začít. Zadáme·li samotný povel LIST a vypisovaný program je delší, nebudeme stačit si jej přečíst, pouze jeho konec - posledních několik řádek. Zadáme-li číslo řádky, vypíše se pouze tato řádka. To může někdy stačit, většinou ale potřebujeme postupně prohlédnout celý program nebo jeho větší úseky. Zapíšeme-li tedy za prvým číslem řádky znaménko plus (+), pak dalším číslem můžeme zadat, kolik dalších řádek chceme vypsat. Tato možnost výpisu je daleko výhodnější než možnost, existující v jiných verzích BASICu, totiž zadáni intervalu od čísla řádky do čísla řádky.
Povelem RUN nařizujete interpretu, aby začal provádět program, který se nachází v paměti počítače počínaje programovým řádkem s nejnižším číslem. Provádění programu se ukončí a interpret se vrátí do stavu READY, najde-li příkaz STOP nebo END, narazí-li na chybný příkaz, překročí-li hodnota v aritmetických výrazech povolený rozsah nebo přerušíme-li program tlačítkem INT.
Povelem NEW vymažeme všechny existující řádky programu a připravíme tak počítač na příjem nového programu. Ve skutečnosti však jenom změníme hodnotu proměnné TXTUNF, kterou interpret používá pro úschovu první.volné paměti RAM. Povelem NEW je na tuto adresu zaznamenána první adresa části paměti, vyhrazená pro program, které se říká programový buffer.
Vlastní program v paměti zůstane zapsán. Pokud se Vám podaří např..omylem stisknout tlačítko RES místo tlačítka INT, musíte interpret "ošidit". Pomocí monitoru si musíte prohlížením paměti najít konec programu, zapamatovat si první adresu po posledním znaku CR (hexadecimálně 0D). Tuto adresu pak zapíšeme do dvou paměťových míst proměnné TXTUNF. Podle výpisu je to.adresa 4024 a 4025. Nová adresa se sem zapisuje opačně, tj. na adresu 4024 zapíšeme nižší část a na adresu 4025 vyšší část. Po návratu z monitoru příkazem R můžeme "vymazaný program" opět použít, tedy znovu spustit příkazem RUN.
Již podle názvu je zřejmé že povelem MONITOR opustíme Mikro BASIC a SAPI-1 očekává příkazy v monitoru. Ten umožňuje snadný zápis programu přímo ve strojovém kódu 8080 pomocí hexadecimálního kódu, prohlížení paměti, opravy a nakonec návrat k jazyku BASIC. MONITOR tedy usnadní zejména přípravu těch částí programu, které jsme se rozhodli napsat ve strojovém kódu.
Tyto úseky programu pak budeme volat z jazyku BASIC příkazem CALL. Pokud takto vytvoříme celý program, můžeme jej přímo z MONITORu spouštět monitorovským příkazem G.
Horní hranice - tedy adresa - programového bufferu byla stanovena při překladu zdrojového textu celého interpretu. Při zápisu Vašeho programu je porovnávána aktuální adresa, kam se program zapisuje s tímto limitem a při pokusu o překročení odmítne interpret dále zapisovat, protože by tim mohly být přemazány další důležité údaje. S touto adresou souvisí i několik dalších adres, jako např. adresa vstupního řádkového bufferu a pod. Při každém zapnutí počítače nebo stisku tlačítka.RES se tato soustava adres přepíše z pamětí EPROM do paměti RAM. Jestliže potřebujete tuto hranici překračovat proto, že jste si rozšířili paměť RAM, avšak z různých důvodů nebyl změněn obsah EPROM, poslouží Vám příkaz RAM k zadání nové horní hranice paměti: Vlastní MONITOR dokáže pracovat v paměti kdekoli, ale interpret BASICu ne. Po zadání povelu RAM s uvedením nové horní meze paměti hexadecimálně (max. 7FFF) budou změněny všechny adresy, kterých se to týká (viz výpis zdrojového textu) a interpret bude pracovat se zvětšeným bufferem pro program. Je nutno ještě podotknout, že tímto příkazem se lze pohybovat pouze nad minimální hranicí 1724 bytů které jsou vyhraženy pro program. Pokud si opatříte desku REM-1, kterou lze rozšiřovat paměti RAM, doporučujeme též, vyměnit původní paměti EPROM za jiné s novým obsahem, neboť pak třeba měnit řadu jiných adres, což ručně nelze dobře provádět.
Příkazy pro zavedení nebo uschování hotového programu do paměti RAM z připojeného kazetového magnetofonu nebo opačně. Příkazem LOAD dosáhnete toho, že do paměti bude načten program, který se nachází jako nejbližší na kazetové pásce. Z toho vyplývá, že pokud bude požadovaný program několikátý v pořadí na pásce, musíte předchozí programy "přeskákat".Na obrazovce se objeví jako znamení o správné činnosti hvězdička a po chvíli též zadané jméno programu (viz SAVE). Magnetofon se sám rozběhne i zastaví, musí být ovšem stisknuto tlačítko pro reprodukci. Při nesprávném ukončení se objeví nápis ERROR (vinou např. chybně nastavené hlasitosti).
Příkaz SAVE opět zapíše na pásku aktuální obsah programové paměti. Po zápisu příkazu se na obrazovce objeví dotaz NAME=. Zde můžete zadat jméno programu na délku 64 znaků. Po ukončení se rozběhne kazeta (musí být stisknuto tlačítko pro nahrávání), čimž se program zapíše. Oba druhy činnosti jsou doprovázeny charakteristickým zvukem z vestavěného reproduktoru. Je třeba upozornit, že není prováděna žádná kontrola a počítač začne zapisovat předběh a pak program v místě nastavení pásky. Může se tedy etát, že při malé opatrnosti si přepíšete dříve zapsaný program.
Povel, který neučiní nic jiného, než převine pásku zpět (musí být stisknuto tlačítko pro převíjení). Opět není hlídáno, jak daleko se má převíjet. Činnost ukončíte stiskem znaku tečka.
Vzhledem k omezením jazyka nebylo možno zabudovat více zpráv než tyto: READY, HOW, WHAT a SORRY.
Zpráva, resp. otázka WHAT? upozorňuje, že počítač něčemu nerozumí, např. vinou překlepu.
HOW? se objeví při překročení číselného rozsahu, který dokáže počítač zpracovat.
SORRY oznamuje, že již není dostatek paměti RAM pro zápis programu nebo pro indexovanou proměnnou.
Po zprávě READY očekává další příkazy nebo povely.
Podívejte se sami, jak taková komunikace s nepozorným programátorem vypadá.
READY >FRINT"AHOJ" WHAT? READY >LET A=98000 HOW? READY >LET @(12345)=234 SORRY |
Názvy programových příkazů musí být na začátku příkazu nebo ihned po číslu programové řádky nebo po dvojtečce, oddělující dva příkazy na řádce. Vyjímkou je příkaz LET, jehož název není třeba uvádět vůbec.
Řada příkazů může být použita přímo v tzv. přímém režimu. Některé příkazy samozřejmě v přímém režimu nemají smysl, jako je REM nebo STOP.
V přímém režimu lze napsat celý program, pokud se vejde do jedné řádky. Příkazy lze psát bez mezer až do délky 64 znaků. Malý příklad:
READY >FORI=1TO10:LPRINTI,I*3,I+4:NEXTI 1 3 5 2 6 6 3 9 7 4 12 8 5 15 9 6 18 10 7 21 11 8 24 12 9 27 13 10 30 14 |
Příkazem LET přiřazujeme hodnotu některé z proměnných.V jediném příkazu můžeme přiřadit hodnoty několika proměnným nebo prvkům indexované proměnné, oddělíme-li jednotlivá přiřazení čárkou. Slovo LET je nepovinné, takže můžeme přímo psát jméno proměnné, operátor přiřazení (=) a hodnotu proměnné. Místo hodnoty může stát na pravé straně "cokoli". Pojem "cokoli" bude v textu použit vícekrát a rozumíme pod ním proměnnou, výraz, textový operátor, číselnou hodnotu, pseudoproměnnou nebo funkci, Nejlépe opět příklad:
READY >LLIST 10 A=3,B=5 20 C=A,D=B 30 E='A' 40 F=234 50 G=HEX(C0) 60 H=34*ABS(-4) 70 LPRINT A,B,C,D 80 LPRINT E,F,G,H READY >RUN 3 5 3 5 65 234 192 136 |
Máme-li již v počítači několik programových řádků, zopakujme si na příkladu možnosti povelu LIST:
LLIST 60 60 H=34*ABS(-4) 70 LPRINT A,B,C,D 80 LPRINT E,F,G,H READY >LLIST+2 10 A=3,B=5 20 C=A,D=B 30 E='A' READY >LLIST 30+3 30 E='A' 40 F=234 50 G=HEX(C0) 60 H=34*ABS(-4) READY >LLIST 30+ 30 E='A' READY > |
Všimněte si, že neudanou hodnotu v druhém příkladu považuje povel za řádku s nejnižším pořadovým číslem a v posledním příkladu za nulu.
Celá skupina příkazů, které slouží k organizaci cyklů. FOR a NEXT jsou samostatné příkazy, TO a STEP pomocná klíčová slova, která mají v celém systému své přesné místo a funkci. Pro STEP = 1 je použití tohoto slova nepovinné (hodnota kroku 1 je implicitní). U příkazu NEXT musí být na rozdíl od dokonalejších interpretů uvedeno označení proměnné. Parametry cyklu lze zadat pomocí výrazů, proměnné atd. Pro ilustraci opět několik příkladů:
READY >LLIST 5 LPRINT"NAPIS DVE PISMENA" 10 FOR I=INCHAR TO INCHAR STEF ABS (-3) 20 LPRINT I, 30 NEXT I READY >RUN NAPIS DVE PISMENA 65 68 71 74 READY > LLIST 10 FOR I=HEX(F2) TO HEX(F6) 20 LPRINT I 30 NEXT I 242 243 244 245 246 READY > 10 FOR I=1 TO 8 20 FOR K=1 TO I 30 LPRINT"A" 40 NEXT K 45 LPRINT 50 NEXT A AA AAA AAAA AAAAA AAAAAA AAAAAAA AAAAAAAA |
Příkaz GOTO přeruší lineární sekvenci při provádění programových příkazů podle čísel řádek. Realizace programu pokračuje na řádce, která byla zadána v příkazu GOTO. Místo tohoto čísla může být "cokoli". Bude-li toto číslo řádky např. výsledkem vyhodnocení výrazu, změní se funkce nepodmíněného skoku ve skok podmíněný. Tím se může simulovat příkaz ON GOTO z větších verzí jazyka BASIC. V případě, že výsledné číslo řádky neexistuje, bude hlášena chyba HOW?
10 LPRINT"10" 20 GOTO 50 30 LPRINT"30" 40 END 45 LPRINT 50 LPRINT"50" 60 GOTO 30 10 50 30 READY >LLIST 10 INPUT A 20 GOTO A*10 30 LPRINT"30" 35 END 40 LPRINT"40" 45 END 50 LPRINT"50"C READY >RUN A:5 50 READY >RUN A:3 30 READY >RUN A:7 HOW? READY > |
Příkaz GOTO lze rovněž úspěšně použít v přímém režimu, potřebujete-li spustit program od jiné než nejnižší řádky. Často tomu bude při ladění po zastavení příkazem STOP, přečtení obsahu "choulostivých proměnných", příp. jejich změnou a pak spuštění programu dál.
Jsou to dva samostatné příkazy, které bez sebe nemohou existovat. Příkazem GOSUB provedeme téměř totéž jako příkazem GOTO. Podobně jako instrukce CALL ve strojovém kódu 8080 však GOSUB zabezpečí zapamatování tohoto místa v programu, v němž byla instrukce použita. Při nalezení příkazu RSTURN ve volaném podprogramu pak pokračuje realizace programu tam kde byl program přerušen: Může to být na následující programové řádce (pokud v ni byl jen jeden příkaz) nebo na následujícím příkazu (v řádce s více příkazy).
Při používáni podprogramů je nutno dát pozor na konec programu. Program musí skončit buď řádkou s nejvyšším číslem (END není povinný) nebo je-li za koncem programu i jeden nebo více podprogramů, příkazem END nebo STOP. Například tak, jak je to v dalším příkladu:
LLIST 10 FOR I=1 TO 5 20 GOSUB 50 30 NEXT I 40 END 50 LPRINT RND(7) 60 RETURN READY >RUN 4 5 6 4 1 READY >RUN 5 4 2 7 4 |
READY >LLIST l0 INPUT A,G,C 20 INPUT "DELKA",D 30 INPUT "VAHA" L 40 I=3 50 INPUT "PRVEK"@(I) 60 LPRINT A,G,C 70 LPRINI D,L,@(3) READY >RUN A:12 G:34 C:126 DELKA D:78 VAHA:l67 PRVEK:l23 12 34 126 78 167 123 |
Nejjednodušší příkaz, který učaruje každému, kdo s programováním v jazyku BASIC začíná. Za klíčovým slovem PRINT (nebo LPRINT pro tiskárnu) je seznam proměnných, výrazů, textových řetězců nebo čísel, navzájem odděleních čárkami. Není-1i na konci tohoto seznamu čárka, je každý příkaz zakončen vypsáním znaků CR a LF (carriage return a line feed což je návrat vozíku a posun o řádku), čili následující příkaz PRINT' bude začínat svou činnost na začátku nové řádky. Samotní příkaz PRINT bez seznamu znamená prakticky jen odřádkování. Je-li příkaz zakončen čárkou za posledním prvkem seznamu, čeká kurzor na displeji (nebo tisková hlava tiskárny) na následující pozici za posledním vypsaným znakem.
Příkaz PRINT v Mikro BASIC nezná středník, užívaný v jiných versích. Kromě čárky je však možno využít tzv. formátovacího znaku, kterým je #.
Základní formát tiskne čísla v pěti sloupcích, což při 40 znacích na displeji znamená, že poslední cifra je vždy na pozici 8, 16, 24 .... 40. Základní rozteč čísel je tedy 8 pozic a můžeme ji měnit právě pomocí formátovacího znaku # , za nímž následuje hodnota nebo opět "cokoli". Nová hodnota platí pouze pro zbytek prováděného příkazu PRINT nebo do dalšího formátovacího znaku v seznamu téhož příkazu.
Formátovací pravidla se však týkají pouze výpisu číselných hodnot. Textové řetězce, stejně jako výpisy hexadecimálních čísel v příkazech BYTE a WORD se tisknou bez mezer a pro jejich oddělení slouží příkaz TAB. Místo popisu raději několik příkladů:
10 LPRINTA,B,C 20 LPRINT#10,A,B,C READY >RUN 1 -567 2 1 -567 2 10 FOR I=2 TO 10 20LPRINT#I,1,2,3 30 NEXT I READY >RUN 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 10 LPRINT"BUDE",#3,22," HODIN" READY >RUN BUDE 22 HODIN 10 A=23456 20 B=A/100 30 LPRINT B,#2,".",A-B*100 READY >RUN 234.56 |
Nutnost použít delší speciální znak v příkazu PRINT vyvolalo použití displeje AND-1. Tento displej umožňuje čtyři typy písma a tak bylo třeba Mikro BASIC přizpůsobit tak, aby je bylo možno využít. Se stejnými pravidly jako u formátovacího znaku slouží k tomuto účelu znak * (hvězdička). Protože i zde může být použito cokoli, vyhodnocuje interpret jen nejnižší dva bity výsledné hodnoty, čili 4 je zde vyhodnoceno j ako 0.
Je-li jako číslice za znakem * zapsána nula; je nastaven základní typ písma, což je implicitní hodnota a tu není třeba zapisovat. Je-li užita číslice 1, bude následovat výpis blikajícími znaky, 2 znamená výpis s blikajícim podtržením a 3 nastaví výpis pomocí znakú s dvojnásobnou šířkou.
Nastavený typ písma platí opět do konce příkazu nebo do další změny typu písma v témže příkazu.
Je třeba při této příležitosti upozornit na některé rozdíly příkazu LPRINT proti PRINT. Především to asi podle typu připojené tiskárny bude rozdíl v počtu znaků na řádce a v tom, že ne každá tiskárna umí automaticky přejít po naplnění jedné řádky na řádku další a znaky CR a LF se v příkazu LPRINT, zakončeném čárkou neobjeví. Proto bude nutné použít vhodný čítač cyklů a po vypsání každého např. 15. údaje zabezpečit výstup znaků CR a LF programově.
Příkaz TAB má v závorce parametr, udávající, kolik mezer se má vytisknout. Nic víc a nic méně. Samozřejmě se pod pojmem vytisknout rozumí vypsat na displeji stejně tak, jak příkaz PRINT znamená v překladu tisk. To jsou pozůstatky s doby před 20 léty, kdy k počítačům byly připojovány dálnopisné přístroje.
Dvojice příkazů, umožňujících přepnout výstup současně na displej i tiskárnu a návrat do základního modu s výstupem jen na displej. Přidání těchto příkazů si vynutilo to, že mimo příkazů PRINT a LPRINT by musely existovat dvojice TAB-LTAB a BYTE LBYTE atd. mnohem jednodušší je přepnout v pravý okamžik výstup na tiskárnu příkazem HARD a později tento výstup zase odpojit příkazem DISPL. Přitom pozor. tiskárna se navíc vypne na konci každého příkazu LPRINT, povelu LLIST a při návratu do READY. Použiti příkazu HARD je zřejmé z řady dalších příkladů. Stejně tak můžeme použít příkazu HARD jako povel, např. před povelem MOMTOR. Získáme tak možnost připojit tiskárnu po celou dobu vyvolání monitoru.
Příkaz IF je podmínkový příkaz, jímž organizujeme v programu větvení výpočtu. Po klíčovém slově IF následuje dvojice aritmetických výrazů nebo proměnných, mezi nimiž je některý s relačních operátorů. Je-li toto porovnání vyhodnoceno jako pravdivé, tj. je-li nahrazeno jedničkou, pokračuje program realizací druhé části příkazu, případně dalších příkazů na témže řádku. Je-li vyhodnoceno jako nepravdivé, pokračuje program následujícím programovým řádkem. Druhá část příkazu IF pokračuje nejčastěji klíčovým slovem GOTO, méně často i jiným příkazem, který v této souvislosti mívá smysl.
O tom, že můžeme výsledky porovnání sčítat a násobit bylo již řečeno dříve a proto krátce dva příklady:
LLIST 10 HARD:INPUT A 20 IF (A>2)*(A<5) LPRINT"ANO":G0T010 30 LPRINT"NE":G0T010 READY >RUN A:1 NE A:2 NE A:3 ANO A:4 ANO A:5 NE A: LLIST 10 HARD:INPOT A,B 20 IF (A>2)*(A<5)+(B>2)*(B<5)LPRINT"ANO":G0T010 30 LPRINT"NE":GOTO10 READY >RUN A:1 B:l NE A:1 B:4 ANO A:4 B:2 ANO A:5 B:5 NE A: |
END znamená konec programu a tento příkaz musíme použít jen tehdy, není li konec programu totožný s koncem textu programu. V tom případě se program zastaví automaticky, tj. po provedení poslední řádky programu. Přesto i v tomto případě doporučujeme END použit. Příkaz STOP způsobí totéž s tím, že se s hvězdičkou vypíše řádek, obsahující příkaz STOP. Je to proto, abychom mohli při ladění programů umístit více příkazů STOP. Po zastavení programu pak víme, jak se program větvil, můžeme vypsat okamžité hodnoty proměnných v přímém režimu, změnit je a pokračovat příkazem GOTO s udáním čísla řádku.
Příkaz vynuluje všech 26 proměnných A - Z. Budeme-li potřebovat vynulovat prvky indexované proměnné @, využijeme programového cyklu FOR TO NEXT nebo vynulujeme paměť RAM v místě uložení prvků indexované proměnné pomocí příkazů POKE (viz dále).
CLS je nejjednodušší příkaz, kterým se vynuluje (vlastně vymezeruje) obrazovka displeje a kursor se nastaví na začátek prvního řádku.
Příkaz CALL, doplněný funkcí HEX umožňuje jednoduchou spolupráci programů v BASIC a strojovém kódu mikroprocesoru. Zabezpečuje skok do podprogramu ve strojovém kódu a po nalezeni příslušné instrukce RET vrátí řízení zpět do programu v BASIC.
Příkaz neumí předávat parametry ani tam ani zpět. Pomoci příkazu POKE a funkcí PEEK a HEX však lze zapsat kamkoli potřebné hodnoty.
Jako příklad spojení programu v BASIC s programem ve strojovém kódu je uveden přiklad testu stisknutí tlačítka T na klávesnici. Nejprve je uveden zdrojový text programu ve strojovém kódu tak, jak by měl vypadat v assembleru, dále následuje program v BASIC, příklad vložení strojového programu do paměti RAM pomocí monitoru a konečně ukázka spuštění programu.
ORG 2200H TLAC: LDA 2800H RLC RLC RNC JMP TLAC LLIST 10 LPRINT"STISKNI TLACITKO" 20 CALL HEX (2200) 30 LPRINT"DEKUJI" READY MONITOR MONITOR *D2200 2200 23 :#:3A 00 28 2203 F4 56 F2 : : 07 07 D0 2206 56 :V: C3 00 22 2209 44 :D:. MONITOR *R READY >HARD READY >RUN STISKNI TLACITKO DEKUJI |
Příkaz POKE umožňuje uložit (zapsat) libovolnou kombinaci osmi bitů 0 až 255 do libovolného adresovatelného místa 0 až 65535.
V konkrétním provedení má příkaz POKE dva parametry, oddělené čárkou. První parametr udává adresu ve výše uvedeném adresovém prostoru, druhým je údaj, který bude na tuto adresu uložen. Oběma parametry může být opět naše "cokoli".
S prvním parametrem nastanou těžkosti, pokud bude potřebovat adresovat vyšší adresu než 32767. Pak je nutno buď použít záporné desítkové číslo nebo výhodněji hexadecimálním vyjádřením pomocí funkce HEX. Stejná pravidla pak pochopitelně platí i u příkazu CALL, O$, I$ a funkce PEEK, kde je také přípustné adresovat celý prostor paměti 64K.
Druhý parametr má reálný obsah 0 až 255. Pokud bude výsledkem vyhodnocení výrazu hodnota větší, bude interpret pracovat jen s hodnotou spodních osmi bitů.
Následující příklad je při praktickém ověřování příkazu POKE přímo na počítači dostatečně přesvědčivý. způsobí totiž střídání 1 a 0 na výstupu bitu 6 výstupního portu 0. Protože tento bit ovládá zvukovou signalizaci klávesnice, je výsledek zřetelně slyšet.
10 POKE HEX(2400),64 20 POKE HFX(2400),0 30 GOTO 10 |
Tento příkaz oceníte zejména při připojování dalších přídavných zařízení, ovládání nejrůznějších výkonových a signalizačních prvků a testování hardware. První parametr příkazu udává číslo výstupního portu. Druhý parametr, oddělený čárkou udává hodnotu, která bude do tohoto portu zapsána (vyslána) provedením příkazu.
Reálné hodnoty obou parametrů jsou 0 až 255 a místo nich může stát opět "cokoli". Interpret rozsah parametrů nehlídá a použije jednoduše spodních 8 bitů.
Příkaz provede výstup znaku, jehož dekadická hodnota je uvedena v závorce. Výstup se objeví na displeji a pokud by byl použit také příkaz HARD, také na tiskárně. V závorce může být opět "cokoli". Příkaz slouží především pro výstup nestandardních znaků, které nemohou být součástí textových řetězců, nebo když znaky vznikají jako výsledek výpočtu. Nejprůkaznější je opět příklad.
10 FOR I='A' TO 'A'+ 8 15 HARD 20 OUTCHAR (I):TAB(2) 30 LPRINT I, 35 TAB(2) 40 HARD:BYTE(I):LPRINT 50 NEXT I READY >RUN A 65 41 B 66 42 C 67 43 D 68 44 E 69 45 F 70 46 G 71 47 H 72 48 I 73 49 |
5 FOR I=0 TO HEX(FFF) STEF 256 10 FOR T=0 TO 255 STEP 16 15 HARD 20 WORD(I+T):TAB(2) 30 FOR K=0 TO 15 40 BYTE (PEEK(I+T+K)):TAB(1) 50 NEXT K 60 LPRINT 70 NEXT T 80 HARD:OUTCHAR(HEX(0C)) 90 NEXT I |
Potřebujeme-li zpracovat údaj z některého vstupního portu mikropočítače a zajímá-li nás jen hodnota jediného bitu, zjistíme, že bychom potřebovali chybějící logickou operaci AND. Pomocí logických posuvů hodnoty pomocí funkce IN by šlo správnou informaci získat. BASIC však příkaz pro posuv nemá podprogram ve strojovém kódu.
Proto byl do Mikro BASIC přidán příkaz MASK, který nastaví vstupní masku pro použití funkce INM, Tato funkce zabezpečí vstup údaje z daného portu a navíc provede logický součin e nastavenou maskou. Počáteční hodnota "masky" před každým spuštěním programu je hexadecimální FF. Příkazem MASK jí můžeme změnit tak, že nová hodnota masky tvoří parametr příkazu. Potřebný příklad bude uveden u funkce INM.
Je to běžný příkaz jazyka BASIC pro zadání časového intervalu. Rozsah parametru je 0 až 255 s tím, že přesnou kalibraci si musíte udělat sami. Záleží totiž na kmitočtu použitého krystalu. Odhadem ze zkušebních vzorků byla jedna jednotka asi 0,1 s. Při provádění tohoto příkazu počítač skutečně čeká a program nelze tlačítkem INT na klávesnici přerušit, protože test na přerušení je vždy na konci každého příkazu.
Podobný příkaz jako předchozí. Rozdíl je pouze v tom, že počítač kromě čekání také vydává zvukový signál. Rozsah parametru je.0 až 32767. Dva společné příklady na použití příkazů WAIT a BEEP jsou také důkazem, že jako parametr příkazů může být skutečně "cokoli".
10 WAIT RND(8) 20 BEEP RND(250) 30 GOTO 10 10 WAIT 5 20 BEEP 25 30 WAIT 5 40 BEEP 150 50 GOTO 10 |
Příkaz pro vstup textových řetězců. Příkaz má jeden parametr, znamenající adresu paměti RAM, Při provádění příkazu program čeká na vstup z klávesnice a interpret zabezpečuje ukládání kódu zapisovaných znaků od určené adresy. Příkaz se přeruší po ukončení textu znakem CR. Interpret zapíše do paměti za poslední znak zadaného textu ještě 00 a navíc aktualizuje pseudoproměnnou LEN (viz dále). LEN pak bude obsahovat hodnotu počtu znaků zapsaného textového řetězce.
Příkaz pro výstup textového řetězce je ještě jednodušší než příkaz I$. Od adresy, zadané parametrem, vypíše text z paměti až po první byte s hodnotou 00. Pro větší srozumitelnost je po následujícím příkladu ještě vypsán obsah paměti RAM pomocí monitoru.
READY >10 I$ HEX(4200) >20 LPRINT LEN >25 HARD >30 O$ HEX(4200) >RUN ABCDEF12 8 ABCDEF12 READY >HRRD RERDY >MONITOR MONITOR *D4200 4200 41 :A: 4201 42 :B: 4202 43 :C: 4203 44 :D: 4204 45 :E: 4205 46 :F: 4206 31 32 00 :1: 4207 32 00 B7 :2: 4208 00 : :. MONITOR *R READY > |
Klíčová slova funkcí nemohou stát na počátku příkazu, ani nemohou být samostatně použita v přímém režimu. Funkce vrací interpretu číselnou hodnotu a může tedy stát tam, kde očekáváme číslo. Navíc potřebuje funkce určitou specifikaci, podle které nám vrátí potřebnou hodnotu. (i některých funkcí tak jde o převod mezi kódy, transformaci adresy v paměti RAM na obsah této paměťové buňky nebo překódování informace o stisku klávesy na klávesnici na kód příslušného znaku.
Mikro BASIC nemá funkcí mnoho pro nedostatek místa.
Generátor pseudonáhodných čísel v rozsahu intervalu od 1 do hodnoty, která je uvedena jako parametr v závorce. Jde tady o celočíselné hodnoty.
Vrací absolutní hodnotu čísla, které je uvedeno jako parametr v závorce. Jako parametr může být opět uvedeno "cokoli". Malý příklad:
10 F0R I=8 TO -12 STEP -3 20 LPRINT #4,ABS(I), 30 NEXT I READY >RUN 8 5 2 1 4 7 10 READY > |
Funkce vrací dekadickou hodnota mezi -32767 a +32767 čísla, které je uvedeno v závorce v hexadecimálním tvaru. Na rozdíl od pravidel zápisu v assembleru se levé nuly (tedy nevýznamné) nepíší a nepíše se ani označení H za timto údajem.
Funkce nemá parametr. Parametr je vlastně dodán stiskem klávesy na klávesnici s funkce INCHAR vrátí dekadickou hodnotu příslušného znaku ASCII. Názorný příklad je poučný nejen pro objasněni této funkce, ale znázorňuje rozdílnost výstupu pomocí příkazů PRINT, BYTE a OUTCHAR,
LLIST 10 A=INCHAR 20 IF A=HEX(0D) END 25 HARD 30 OUTCHAR A:TAB(2):LPRINT A, 35 TAB(2):BYTE(A):LPRINT 40 GOTO 10 READY >RUN 1 49 31 9 57 39 A 65 41 K 75 4B * 42 2A ? 63 3F ! 33 21 5 53 35 Z 90 5A |
Tradiční protipól příkazu POKE. Doslovný překlad znamená "pokukovati" a ve skutečnosti je to zjištění obsahu nějakého místa v paměti. Parametr v závorce udává adresu, s níž budeme číst a funkce vrací hodnotu bytu na této adrese. Pro názornost je uveden příklad, který nečte hodnotu s paměti, ale z paměťově adresovaného portu 1. Celý program řeší v jazyku BASIC totéž, jako příklad, uvedený u příkazu CALL. Jak.je vidět, je řešení v jazyce BASIC mnohem jednodušší.
10 LPRINT"STISKNI TLACITKO" 20 A=PEEK(HEX (2800)) 40 IF A=191 LPRINT"DEKUJI":END 50 GOTO 20 READY >RUN STISKNI TLACITKO DEKUJI |
Protějšek příkazu OUT vrací hodnotu 0 až 255 převzatou se vstupního portu, jehož číslo je uvedeno jako parametr v závorce. Funkce INM navíc provede logický součin se vstupní maskou, nastavenou předtím příkazem MASK. Zase příklad ukáže víc.
10 LPRINT IN (HEX(FF)),:TAB(2) 20 LPRINT INM (HEX(FF)) 30 NASK 7 40 LPRINT IN (HFX(FF)),:TAB(2) 50 LPRINT INM (HEX(FF)) READY >RUN 255 255 255 7 |
Tyto tři funkce nejsou plnohodnotnými funkcemi. Nedostávají žádný viditelný parametr. Vracejí sice hodnotu, kterou lze pomocí příkazů běžně zpracovávat, jejich nastavení však nemá na starosti programátor, ale interpret:
Pseudoproměnná LEN udává, kolik znaků vstoupilo do paměti RAM při posledním použití příkazu I$.
Pseudoproměnná TOP vrací zase hodnotu, rovnající se adrese první volné buňky paměti RAM za programovým textem. S rostoucí délkou programu se hodnota TOP zvětšuje a udává, kam můžeme bezpečně zapisovat textové řetězce pomocí příkazu I$, psát programy ve strojovém kódu atd.
Pseudoproměnná SIZF udává, kolik volných bytů v paměti RAM ještě máme k dispozici pro další program a prvky indexované proměnné.
Příklad na použití proměnné LEN již byl uveden. Příklady na výpis hodnot TOP a SIZE jsou zde:
READY >NEW READY >LPRINT TOP:HARD:WORLD(TOP) 8430 20EE READY >10 REM >LPRINT TOP:HARD:WORD(TOP) 8436 20F4 READY >NEW READY >LPRINT TOP:HARD:WORLD(TOP) 8430 20EE READY > READY >10 LPRINT"PRO PROGRAM MATE K DISPOZICI" >20 LPRINT"JESTE", #5, SIZE. " BYTU PAMETI RAM" >RUN PRO PROGRRM MATE K DISPOZICI JESTE 1642 BYTU PRMETI RAM |
Teprve když známe všechny příkazy a funkce jazyka Mikro BASIC, můžeme se podívat na čtyři příklady. Zejména bude vhodné si ukázat, jak se pracuje s indexovanou proměnnou a textovými řetězci.
První program zjišťuje, zda je číslo z intervalu 1 až 100 prvočíslem. Zajímavé jsou v něm příkazy IF pro větvení programu a kombinované výpisy textu a čísel.
LLIST 5 LPRINT:HARD 10 INPUT"CISLO"A 15 IF (A=0)+(A>100) GOTO 10 20 B=1:I=0 30 B=B+1 35 IF B>A/2 GOTO 100 40 C=A/B 50 IF A#C*B GOTO 30 60 LPRINT"CISLO",#5,A," JE DELITELNE",B 70 I=1 80 GOTO 30 100 IF I=1 GOTO 5 110 LPRINT"CISLO",#5,A," JE PRVOCISLO" 120 GOTO 5 READY >RUN CISLO:4 CISLO 4 JE DELITELNE 2 CISLO:7 CISLO 7 JE PRVOCISLO CISLO:123 CISLO:0 CISLO:12 CISLO 12 JE DELITELNE 2 CISLO 12 JE DELITELNE 3 CISLO 12 JE DELITELNE 4 CISLO 12 JE DELITELNE 6 CISLO:97 CISLO 97 JE PRVOCISLO * 10 INPUT"CISLO"A READY > |
Druhý program je ukázkou použití indexované proměnné. Prvé část zajišťuje vstup hodnot jednotlivých prvků indexovaného pole, druhá část výpis těchto hodnot.
HARD READY >LLIST 10 FOR I=0 TO 10 20 HARD:INPUT @(I) 30 NEXT I 40 LPRINT 50 FOR I=0 TO 5 60 LPRINT #5,@(I), 70 NEXT I READY >RUN @(I):12 @(I):23 @(I):-34 @(I):678 @(I):-4 @(I):2 12 23 -34 648 -4 2 READY > |
Třetí program řeší podobný problém s tím rozdílem, že počet prvků může být 100, pokud nemá některý prvek nulovou hodnotu. Při zadání nulové hodnoty je vstup prvků ukončen a hodnoty prvků jsou vypsány podle velikosti. Celý program má tedy tři samostatné části: vstup dat, třídění a výstup dat.
READY >LLIST 10 FOR I=0 TO 99 20 HARD:INPUT @(I) 30 IF @(I)=0 GOTO 60 40 NEXT I 60 FOR X=0 TO I-1 70 FOR Y=0 TO I-X-1 80 IF @(Y+1)>=@(Y) GOTO 100 90 Z=@(Y):@(Y)=@(Y+1):@(Y+1)=Z 100 NEXT Y:NEXT X 105 FOR K=0 TO I-1 110 LPRINT #5,@(K), 120 NEXT K READY >RUN @(I):12 @(I):-6 @(I):23 @(I):56 @(I):8 @(I):-1 @(I):87 @(I):0 -6 -1 0 8 12 23 56 READY > |
Poslední program má také tři relativně samostatné části. První úsek programu zajistí vstup tří textových řetězců do paměti RAM s tím, že počáteční adresy těchto tří textů jsou uloženy ve třech prvcích indexované proměnné. Druhý úsek programu generuje postupně kombinace tří indexů I, K, L a třetí úsek programu převádí každou z kombinací na výpis tří uložených textů v pořadí, odpovídajícím této kombinaci. Poslední úsek programu je napsán jako podprogram, i když by mohl být součástí hlavního programu. Všimněme si však jiných podrobností.
Řádek 10 určuje, že očekávané textové řetězce budou ukládány ihned za text programu, tedy od adresy TOP, Hodnota proměnné R je pak po každém vstupu změněna o délku řetězce a navíc je přeskočena koncová nula, označující konec textu, To proto, aby příkaz O$ vypsal pouze jeden text. Jiný·způsob práce s textovými řetězci může být ten, že si kromě počáteční adresy textu zapamatujeme také příslušnou hodnotu LEN. K tomu však potřebujeme vždy dva prvky indexované proměnné.
READY >LLIST 10 R=TOP 20 FOR T=1 TO 3 30 @(T)=R 40 I$ R 50 R=R+LEN+1 60 NEXT I 65 LPRINT 70 FOR I=1 TO 3 80 FOR K=1 TO 3 90 IF K=I GOTO 130 100 FOR L=1 TO 3 110 IF (L=1)+(L=K) GOTO 120 120 NEXT L 130 NEXT K 140 NEXT I 150 END 300 HARD 305 O$ @(I):TAB(1) 310 O$ @(I):TAB(1) 320 O$ @(I) 330 LPRINT:RETURN READY >RUN DNES PADA SNIH DNES PADA SNIH DNES SNIH PADA PADA DNES SNIH PADA SNIH DNES SNIH DNES PADA SNIH PADA DNES |
U jednodeskových mikropočítačů a stavebnic bývá monitor jediným programem. Teprve po "natažení" dalšího programu do paměti RAM nebo po přidání pamětí EPROM s programem můžeme pomocí některého příkazu monitoru tento program spustit.
V základním programovém vybavení SAPI-1 má Mikromonitor vedlejší funkci. Proto je také po zapnutí počítače spuštěn interpret jazyka Mikro BASIC a do monitoru můžeme přejít pomoci povelu MONITOR.
Není-li Mikromonitor hlavním programem, musí zabírat v paměti EPROM co nejméně místa. Proto byla zvolena úsporná varianta bez zbytečných příkras, které je možno snadno napsat v jazyku BASIC. Přesto je vzhledem ke své délce poměrně efektivním prostředkem pro práci se strojovým kódem.
Po přechodu do monitoru povelem MONITOR očekává počítač příkazy vypsáním hvězdičky. Příkazy jsou jednopísmenové a první tři z nich vyžadují zapsat jeden parametr. Než si je postupně probereme, podívejme se na jejich přehled. Zkratka "adr" znamená parametr, udávající hexadecimálně adresu v rozsahu 0 až FFFF.
Dadr | - výpis obsahu paměti s možností změny |
Sadr | - skok do podprogramu s návratem do monitoru |
Gadr | - odstartování programu |
R | - návrat do jazyka Mikro BASIC bez zrušení programu |
B | - inicializace Mikro BASIC |
Adresa se zadává hexadecimálně, levé nuly není nutno psát. Ze písmenem příkazu nesmí být mezera a při chybě stačí pokračovat správným zadáním parametru. Monitor vezme v úvahu pouze poslední čtyři znaky. Chybí-li parametr vůbec, nahradí jej.monitor nulou.
Všechna nesprávná zadání a použití nedovolených znaků monitor odmítne a čeká na další příkaz.
Na první pohled se zdá seznam příkazů Mikromonitoru velmi chudý. Příkaz D je však velmi univerzálním příkazem a nahrazuje vlastně pět příkazů běžných u monitorů jednodeskových počítačů. Podívejme se tedy na příkazy Mikromonitoru blíže.
Nejběžnější příkaz všech monitorů (display memory) u SAPI-1 zcela postačí pro zápis a opravy programů ve strojovém kódu. Po zadáni parametru, kterým je počáteční adresa a ukončeni zadání příkazu znakem CR se vypíše hexadecimální obsah paměťové buňky a zároveň odpovídající znak podle tabulky ASCII. Navíc nám monitor zjistí délku instrukce, odpovídající tomuto bytu podle instrukčního souboru 8080 a vypíše Hexadecimálně i druhý a příp. třetí byte instrukce. Je to tedy jakýsi náznak reverzního assembleru s tím, že kódy nejsou vypisovány symbolicky. Je to velmi příjemné při hledání chyb a při opravách. Výpis další instrukce následuje po každém dalším stisku klávesy CR. Na začátku každého řádku je vždy vypsána adresa, zvětšená pochopitelně o délku předcházející instrukce. Není-li byte, vypsaný na prvnim místě operačním kódem, můžeme přerušit přičítáni délky instrukce k počáteční adrese a pokračovat výpisem následujícího bytu bez ohledu na její délku. K tomu stačí použít klávesu SP (space - mezera).
Klávesou BS (backspace - návrat) se můžeme vracet k předcházející adrese (případně klávesou LF) a "procházet" se tak libovolně po paměti počítače. Nejlépe to objasní příklad. Poznámky za svorkami vpravo od výpisu, provedené Propisotem znamenají použité klávesy pro prohlížení paměti. Je to ale také vidět vlevo na zobrazovaných adresách, tedy jak rostou nebo klesají.
READY >MONITOR MONITOR *D0 0000 C3 19 00 :C: \ 0003 2A 24 40 :*: | 0006 23 :#: } CR 0007 C9 :I: | 0008 C3 EE 47 :C: / 0009 EE 47 : : \ 000A 47 :G: } SP 000B 2A 01 40 :*: / 000E 2B :+: - CR 000D 40 :@: \ 000C 01 40 2B : : | 000B 2A 01 40 :*: } BS 000A 47 :G: | 0009 EE 47 : : / 0008 C3 EE 47 :C: \ 000B 2A 01 40 :*: } CR 000E 2B :+: / 000F C9 :I:. MONITOR *R READY > |
S pouhým procházením po paměti se spokojíme jen někdy, příkaz D nám však umožňuje kdykoli zadávat nový obsah paměti a to jak hexadecimálně, tak i v kódu ASCII. V druhém případě musí být text uzavřen v uvozovkách. Nové údaje můžeme oddělovat mezerou nebo po každém z nich použít znak CR. Příklad ukončíme zadáníma tečky (.). Následující příklad dokumentuje možnosti zápisu nových údajů, pochopitelně pouze do paměti RAM.
Oba příkazy zabezpečí skok do programu na zadané adrese. Příkaz S (subroutine call) navíc zajistí návrat do monitoru po nalezení příslušné instrukce RET. Příkaz G (go) je prostým skokem bez návratu. První příkaz používáme při ladění programu v monitoru, druhý pro spuštěni programu ve strojovém kódu.
READY >MONITOR MONITOR *D4300 4300 96 : : 4301 41 :A: 4302 C3 1A 44 :C: 4303 1A : : 4304 44 :D: 4305 2A 3B 42 :*:12 23 45 67 4309 B7 :7:34 430A CA B1 43 :J:56 430B B1 :1: 403A 56 :V: 4309 34 :4: 4308 67 : : 4307 45 :E: 4306 23 :#: 4305 12 : : 4304 44 :D:"ABCDEF" 430A 56 :V: 4309 46 :F: 4308 45 :E: 4307 44 :D: 4306 43 :C: 4305 42 :B: 4304 41 :A:. MONITOR *R READY > |
Oba příkazy zabezpečí návrat do jazyka Mikro BASIC. Příkaz R (return) přitom neudělá jinak nic a rozepsaný program v jazyce BASIC je v tom stavu, v jakém jsme ho opustili před povelem MOMITOR.
Příkaz B (BASIC) naproti tomu provede totéž jako tlačítko RESET na klávesnici. Inicializace jazyka BASIC má za následek vymazání celého programu.
Výpis programu ve zdrojovém tvaru bude vydán ve zvláštní příručce. Je však třeba předem upozornit, že se v něm mohou vyskytnout některé odchylky od toho programu, který je realizován na Vašem počítači. Vliv na to má druh použitých pamětí, jsou-li paměti umístěny jen na desce JPR-1 nebo na desce REM-1, zda jsou připojeny jen standardní periferie a pod. Doporučujeme proto přesvědčit se pomocí monitoru, zda obsah paměti Vašeho počítače odpovídá na konkrétních adresách tomu, co je uvedeno ve výpisu - míněno samozřejmě ve strojovém kódu 8080.
Interpret jazyka Mikro BASIC začíná na adrese 0, Tam je však uložena pouze skoková instrukce na adresu 19, kde je skutečný, tzv, studený start interpretu. Při skutečném startu je vynulován programový buffer, rozsah paměti RAM je nastaven na základní hodnotu (to je třeba si uvědomit, máte-li přidány další paměti, ale původní interpret; viz povel RAM) a interpret čeká na Vaše příkazy.
Tzv. horký start začíná na adrese 4D. Návrat interpretu na tuto adresu poznáte podle výpisu READY na obrazovce, Většinou se sem vrací interpret po chybě nebo po skončení programu. Pouhý výpis vodícího znaku a čekání na vstup řádku začíná na adrese 70. Od adresy DC začíná tabulka klíčových slov. Končí na adrese 267 a pro každý povel, příkaz nebo funkci je v ní uložen text klíčového slova v kódu ASCII, jeden nulový byte a dvoubytová adresa prováděcí rutiny.
Další řada adres může zajímat ty, kdo potřebují pracovat se vstupy a výstupy. Podprogram povelu LOAD začíná na adrese B23, podprogram povelu SAVE na adrese BB3, výstup znaku na displeji a tiskárně C32, výstup znaku na displeji C67 a vstup znaku z klávesnice D6A.
Další důležitá adresy jsou uvedeny v příloze v přehledu.
Projde-li program po zapnutí úseky studeného a horkého startu, je vypsán vodící znak a interpret čeká na zadání prvého příkazu nebo povelu. Text zadaného příkazu nebo povelu lze až do odeslání znakem CR opravovat ve vstupním řádkovém bufferu o délce 64 znaků. Tento buffer je umístěn vždy až na konci celé paměti RAM. Délka 64 znaků znamená, že na obrazovce bude ležet text ve dvou řádkách. Klávesou BS se však dokážete vracet jen v rozmezí jedné řádky. Uděláte-li chybu a kurzor Vám mezitím přešel do druhé řádky, nelze ji opravit jinak, než napsáním celého textu znovu.
Podprogram pro vstup textu do řádkového bufferu začíná na adrese 7B3 a končí na adrese 7FE a lze jej použít i mimo rámec interpretu. Pokud nerozšíříme paměť povelem RAM, lze vstupní buffer najít na adrese 47AD. O této adrese se snadno přesvědčíte tak, že po přechodu do monitoru a výpisu několika bytů, následujících za touto adresou by se tam měl objevit vámi před tím zadaný povel MONITOR.
Ukončíme-li zápis klávesou CR, vrátí se program na adresu 75 do základní programové smyčky interpretu, která leží mezi adresami 70 a CF, Zde se rozhoduje, zda jde o programový řádek, začínající číslem nebo přímý režim nebo povel.
V druhém případě pokračuje interpret na adrese 929 a prohledá ním tabulky klíčových slov, příp. pak skokem do příslušného podprogramu. Jestliže jde o programový řádek, pokračuje program na adrese 85 a řádek je zařazen, vymazán nebo přepsán v programovém bufferu na adrese 40EF. Přitom je každý řádek zatříděn podle počátečního čísla. Každý řádek programu v programovém bufferu začíná dvěma byty s binární hodnotou čísla řádku, následuje nezkrácený text a celý řádek končí znakem CR (hexadecimálně OD). Konec programu v programovém bufferu není nijak označen. Zjistíte ho podle údaje na adrese 4024 a 4025, který udává první volnou adresu bufferu. Přepsáním tohoto údaje před použitím příkazu SAVE můžeme interpret "podvést" a nechat si tak vypsat i úsek paměti RAM za koncem programu v BASIC. To může být užitečné např. pro úschovu programů ve strojovém kódu, Při opětném načtení programu pak nesmíme vrátit původní adresu na 4024 a 4025. Jinak by interpret považoval celý úsek paměti za programový buffer, obsazený textem programu.
Realizace programu po povelu RUN má velmi jednoduchá pravidla: v programovém bufferu je postupně prohlížen text programu, přičemž jako ukazatel slouží dvojitý registr D. Ten obsahuje vždy adresu právě zpracovávaného znaku v textu programu, zatímco číselné údaje a parametry jsou mezi příkazy s funkcemi předávány pomoci dvojitého registru H. Prohlížení textu začíná nalezením čísla prvního programového řádku. Adresa v registru D je dvakrát inkrementována a protože interpret předpokládá nalezení některého klíčového slova příkazu, je prohledávána tabulka klíčových slov, počínaje příkazem NEXT. Část tabulky, obsahující povely je záměrně přeskočena. Všechny mezery v textu jsou ignorovány, nesmí se však vyskytnout uprostřed klíčových slov.
Je-li v tabulce nalezeno odpovídající klíčové slovo, končící bytem s hodnotou 0, pokračuje interpret provedením příslušného podprogramu v příkazu, jejíž adresa je v tabulce na následujících dvou bytech. Pro příkaz NEXT je například klíčové slovo od adresy 11E. Nulový byte je na adrese 122 a v dalších dvou bytech je adresa výkonné adresy, tedy 4AB.
Na konci každého příkazu interpret zjišťuje, zda je příkaz ukončen znakem CR nebo dvojtečkou a rozhodne, bude-li pokračovat hledáním dalšího čísle programového řádku, V obou případech bude ještě testovat, zda nabylo použito tlačítko INT, které umožňuje přerušit realizaci programu.
Narazí-li podprogram pro vyhodnocení výrazů na klíčové slovo funkce, zabezpečí prohledání tabulky klíčových slov od adresy 1EB, Další postup je stejný jako při zpracování příkazů. Podprogram pro zpracováni funkce převezme příslušný parametr, zpracuje ho a vrátí výslednou hodnotu v dvojitém registru H. Rozdíl je pouze v tom, že podprogramy příkazů končí přechodem na hledáni dalšího příkazu nebo programového řádku, zatímco podprogramy funkcí končí instrukci pro návrat z podprogramu RET, To proto, že zpracování funkcí je vždy součástí vyhodnocení výrazu. Z toho také plyne to, že místo výrazu může být naše "cokoli".
Ne každému bude vyhovovat překlad interpretu od adresy nula, určený pro paměti typu 2716 s využitím pamětí RAM 1K od adresy 2000, Použití pamětí typu 2708, umístěných na desce JPR-1 vyžaduje nový překlad programu. Amatérskou úpravu strojového kódu nedoporučujeme, záležitost je totiž daleko složitější a přesný překlad podle použitých pamětí lze zaručit pouze strojovým překladem, který jedině může zaručit bezvadnou činnost výsledného strojového kódu. Rovněž při přechodu na desku pamětí REM-1 je třeba změny řady adres, takže vhodnější bude se předem dohovořit s dodavateli na příp. prosté výměně pamětí EPROM nebo jiném pro Vás vhodném řešení.)
Mikro BASIC má řádkovou strukturu, kde na jedné řádce může být více instrukcí. Řádky jsou číslovány čísly od 1 do 32767. Řádky budou prováděny ve vzestupném pořadí. Pokud není před příkazem uvedeno číslo řádky, bude příkaz proveden ihned po zadání znaku konce řádky. Tomu se říká přímý režim. Jsou-li řádky číslovány, počítač je po zadání znaku konce řádky pouze uloží do paměti. Pak čeká na zadání další řádky s číslem nebo bez čísla.
Mikro BASIC má trvale vyhrazeno 26 proměnných, které jsou označeny písmeny A až Z. Před prvým použitím v programu se doporučuje vynulovat je, mohou totiž mít nedefinovaný obeah.
Mikro BASIC je vybudován na používání určitých slov, odvozených z angličtiny, která vyvolávají jednoznačnou činnost: Rozlišujeme zde povely a příkazy.
Mikro BASIC provádí povely ihned, nelze je zadávat v programu. Slouží k řízeni počítače a některým pomocným činnostem.
Jsou to:
LIST n [+m] | Vypíše na obrazovku obsah programové řádky, zadané číslem n + m dalšich řádek. |
LLIST n [+m] | Totéž jako LIST, vypisuje se na příp. připojenou tiskárnu. |
RUN | Spustí program, zapsaný, v paměti od nejnižšího čísla řádky. |
NEW | Nuluje obsah proměnné TETUNF, textového bufferu (vlastni text vymazán není). |
MOMTOR | Je opuštěn BASIC a jsou očekávány příkazy MONTORu (viz dále). |
RAM adr | Řízení horní hranice RAM pro zápis programu nebo prvků indexované proměnné. |
LOAD | Zavede do paměti program, který právě přichází na řadu na kazetové pásce připojeného magnetofonu. |
SAVE (NAME=) | Zapíše na magnetickou pásku po zapsání prázdného předběhu jméno programu, které je mu zadáno (max.64 znaků) a za něj pak obsah programového bufferu. |
Následující klíčová slova slouží jako programové instrukce a lze je použít většinou v přímém režimu nebo s čísly řádek jako součást programu.
Jsou to:
[LET] jméno=výraz/hodnota | Ukládá výsledek vyhodnoceného výrazu nebo zadanou hodnotu na. místo v paměti, pojmenované "jménem" |
FOR n=hodnotal TO hodnota2 [STEP hodnota3] | Příkaz počátku cyklu, kde n je proměnná cyklu. Hodnota1 udává počáteční hodnotu, hodnota2 koncovou hodnotu, hodnota3 velikost kroku.Implicitní je hodnota3=l |
NEXT n | Ke každému zadanému FOR n musí v programu existovat příkaz konce cyklu NEXT n. |
GOTO {výraz,/č. řádky} | Příkaz nepodmíněného skoku. Pokud hodnota výrazu neodpovídá existujícímu řádku nebo č.řádky je udáno nesprávně, skonči BASIC hlášením chyby. |
GOSUB {výraz,/č. řádky} | Volání podprogramu, začínajícího na čísle řádky, zadané výrazem nebo přímo. |
RETURN | každý podprogram musí být ukončen tímto příkazem. Vrací řízení na následující řádku za voláním podprogramu. |
REM | Uvádí komentář. Nevýkonný příkaz, pouze zabírá místo v paměti. Tiskne se jen příkazem LIST. |
INPUT "text",n | Vstup dat do programu. Může být zadáno více dat jednoduchých proměnných nebo prvků indexované proměnné.Současně může být vypisován libovolný, text, zadaný v uvozovkách. Čekáni na vstup dat je oznámeno na obrazovce jménem přísl. proměnné, následované dvojtečkou. |
PRINT [*n,] [#n,] | seznam proměnných nebo výrazů nebo text. řetězců nebo čísel. Vysílá určené hodnoty na obrazovku. Části seznamu lze oddělit čárkami. Je li čárka užita, není generována posloupnost CR/LF. Viz též formátovací znak # a příkaz TAB. |
LPRINT | stejné parametry jako PRINT. Vysílá znaky na tiskárnu. |
TAB (n) | "Vytiskne"zadaný počet mezer |
HARD DISPL | Dvojice příkazů, zapínajících a vypínajících tisk na příp. připojenou tiskárnu. Funkce displeje zůstává zachována. Působi i v MONITORu mimo rámec BASICu. |
IF {aritm. výraz/proměnná} | rel.operátor {aritm. výraz/proměnná } příkaz Příkaz podmíněného větvení programu. |
END | Logicky ukončuje program. |
STOP | Zastaví program a vypíše číslo řádky, kde stojí. Lze program spustit dál příkazem GOTO č.řádky. |
CLEAR | Nuluje všech 26 proměnných. Po zapnutí mají neznámý obsah. |
CLS | Výmaz obrazovky. Nastaví kurzor na začátek prvé řádky. |
CALL adr | Skok do podprogramu ve strojovém kódu. Návrat zpět musí být zajištěn strovou instrukcí RETURN |
POKE adr,n | Zapíše na zadanou adresu hodnotu, uvedenou v n (přímo nebo výrazem) |
OUT n1,n2 | Zaslání hodnoty n2 na výstupní port n1 |
OUTCHAR (n) | Výstup znaku o zadané dekadické hodnotě n na displeji. n může být výrazem. |
BYTE (n) | Převede na hexadekadický tvar dekadickou hodnotu n a vytiskne ji v intervalu 00 - FF. |
WORD (n) | Totéž jako BYTE, ale v intervalu 0000 - FFFF. |
MASK (n) | Zpracuje údaj na vstupu z portu pomocí masky. |
WAIT n | Čeká stanovený časový interval. Jedna jednotka je asi 0,1 sec. |
BEEP n | Vydává zvukový signál po stanovenou dobu. |
I$ n | Od zadané adresy bude zapisovat textový řetězec z klávesnice. BASIC po ukončení řetězce připíše ukončovací znak 00. |
0$ n | Vypisuje znakový řetězec, nalézající se na zadané adrese, pokud nenajde hodnotu 00. |
RND (n) | Generuje pseudonáhodná čísla v intervalu od 1 do n. |
ABS (n) | Vrací absolutní hodnotu čísla n, zadaného přímo nebo výrazem. |
HEX (n) | Konvertuje číslo n z hexadecimálního do dekadického tvaru. |
IHCHAR | Vrací dekadickou hodnotu znaku, zadaného z klávesnice. |
PEEK (n) | Z adresy n přečte hodnotu jednoho byte. |
IN (n) | Ze zadaného vstupního portu přečte hodnotu 0 - 255. |
INM (n) | Totéž, provede však logický součin se vstupní maskou, nastavenou příkazem MASK. |
LEN | Udává, kolik bytů vstoupilo při posledním použiti příkazu I$. |
TOP | Udává adresu prvé volné buňky paměti za programovým textem. |
SIZE | Velikost volné paměti pro program a prvky indexované proměnné. |
D adr | Výpis obsahu paměti ze zadané adresy. Podle okolností bude zobrazen i obsah jednoho nebo dvou dalších byte (podle délky přip.instrukce).Je-li to možné, je obsah buňky zobrazen i znakově. Kurzor stojí na konci a čeká na zápis nového obsahu buňky hexadecimálně. Stiskem CR se zobrazí další instrukce, stiskem SP další byte. klávesou BS se lze vrátit o jeden byte spět. |
S adr | Skok do podprogramu na dané adrese s návratem do Monitoru po nalezeni instrukce RET. |
G adr | Spuštění programu od udané adresy. Ukončení a návrat musí zajistit uživatel. |
R | Návrat z Monitoru do BASICu bez jakékoli další činnosti. Program v BASICu zůstane nezměněn. |
B | Návrat do BASICu s výmazem celého programu. |
Aritmetické operátory | Priorita | |
+ | plus pro sčítání | 4 |
- | mínus jako znaménko | 1 |
- | mínus pro odčítání | 4 |
* | hvězdička pro násobení | 2 |
/ | lomítko pro děleni | 3 |
Relační operátory
> | vétěí než | |
< | menší nsž | |
= | rovná se | |
# | není rovno | |
>= | je větší nebo rovno | pořadí znaků |
<= | je menší nebo rovno | nutno zachovat |
Výrazy jsou vyhodnocovány podle priority aritmetických operací. Nejvyšší prioritu má negace, dále násobení, dělení a poslední je sečítání a odečítáni. Tuto prioritu lze změnit použitím závorek. Pokud je závorek použito více postupuje se z nejvnitřnější směrem ven. Je třeba připomenout, že tento BASIC je celočíselný. Pokud při vyhodnocení výrazu bude obsah některé vnitřní závorky vyhodnocen jako menši než jedna, nebude zaokrouhlen na jednu, ale vše za myšlenou desetinnou tečkou bude odříznuto, výraz tedy bude roven nule! To by mohlo zejména při násobení zcela zkreslit výsledek. Chyba totiž nebude hlášena. Při děleni nulou však bude hlášena chyba HOW?
Po zapnuti se BASIC ohlásí
READY
Znakem "větší" oznamuje, že čeká na povely nebo příkazy.
WHAT? | Předchozí zápis je vadný a neodpovídá klíčovým slovům. |
HOW? | Hlásí přetečení číselného rozsahu, který je schopen zpracovat. |
SORRY | Nemá dostatek paměti RAM pro program nebo indexovanou proměnnou. |
LIST | 0359 | RETURN | 042B | LOAD | 0B23 |
LLIST | 0356 | REM | 050C | RND | 06C4 |
GOTO | 0339 | CLEAR | 051B | NEW | 030D |
LPRINT | 03A4 | CLS | 0923 | RUN | 0316 |
stručný přehled programového vybavení SAPI-1
Příkazy: | |
[LET] | STOP |
FOR TO NEXT STEP | CLEAR |
GOTO | CLS |
GOSUB | CALL |
RETURN | POKE |
REM | OUT |
INPUT | OUTCHAR |
BYTE | |
LPRINT | WORD |
TAB | MASK |
HARD | WAIT |
DISPL | BEEP |
IF | I$ |
END | O$ |
Povely: | |
LIST | MONITOR |
LLIST | RAM |
RUN | LOAD |
NEW | SAVE |
REWIND | |
Zprávy: | |
READY | WHAT? |
HOW? | SORRY |
Funkce: | |
RND | IN |
ABS | INM |
HEX | LEN |
INCHAR | TOP |
PEEK | SIZE |
Příkazy Mikromonitoru:
D S G R B
Možnosti zpracování:
Celá čísla v rozsahu -32767 do +32767 (na dvou bytech)
Aritmetické operátory: +, -, *, /.
Logické operátory: >, <, =, # , >=, <=.
26 proměnných A až Z
Indexovaná proměnná @ s poř.číslem prvku 0 až 32767
Textový řetězec se uzavírá do uvozovek ".
Textový operátor se uzavírá do apostrofů '
Čísla řádek od 1 do 32767.
Zkratka ASCII znamená "American Standard Code for Information Interchange". Je normalizován v USA a řada dalších výrobců jej rovněž používá. Tato norma byla připravena s ohledem na snadné dekódování skupin znaků i s ohledem na potřeby komunikačních i datových systémů a jednoznačné zobrazení. U nás platí obdobné kódy ISO-7 a MTA-5.
Kód ASCII je sedmibitový a je ho tedy možné doplnit jedním paritnim bitem (na sudou nebo lichou paritu).Obvykle se zobrazuje ve formě tabulky, která má 8 sloupců po 16 řádcích.(viz tab.l.). Z tabulky je zřejmý charakter kódu:
Protože se v literatuře i ve výpisu programů objevují i názvy jednotlivých znaků ASCII, jsou v tab.2 názvy v angličtině a jejich vyjádření HEX a DEC je v tab.3.
Řídící znaky kódu ASCII lze rozdělit do 4 skupin: l. řízení komunikace, 2. ovládání formátu (tiskárna, psací stroj), 3. řízení přídavných zařízení, 4. oddělovače informací.
Znaky, patřící do první skupiny se používají převážně při přenosu dat. Znak NUL, představovaný samými nulami, slouží k vyplnění volného času nebo k vyplněni prázdného media. Znaky NUL mohou být doplněny nebo vypuštěny zcela libovolně, aniž se tím cokoli změní na přenášené zprávě. Znak SYN slouží k synchronizaci znaků v synchronní komunikaci: Znak SOH vyznačuje začátek záhlaví zprávy, tj. údaje, které se většinou na počítači nezpracovávají, obsahují však adresu a další údaje o zdroji a směru zprávy. Znak STX ukončuje záhlaví a označuje začátek vlastní zprávy. Zpráva končí znakem ETX nebo jde-li o blokový přenos pak EOB. Je-li ukončen celý přenos, je ještě vyslán znak EOT - konec přenosu. Znak ENQ znamená jednak požadavek, aby vzdálené stanoviště vyslalo zprávy o identifikaci, jednak stav připravenosti. Znaky ACK a NAK jsou vysílány přijímajícím vysílajícímu jako odezva buď na ukončený konec bloku dat nebo na znak ENQ. Odezva může být buď kladná - ACK, nebo záporná - NAK. Chceme-li do sekvence znaků v kódu ASCII vsunout znaky, které mají jiný význam než je definováno, (např. speciální grafické symboly) musíme vyslat nejprve znak SO (shift out) s po vyslání těchto znaků znak SI (ehift in).Tato dvojice znaků ale také může sloužit u tiskárny pro přepínání barvící pásky z černé na červenou a zpět). Pro podobné účely slouží i znaky DLE a ESC. Znak CAN umožňuje označit data, v nichž je chyba a jež mají být přijímacím stanovištěm ignorována.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
0 | NUL | DLE | SP | 0 | @ | P | - | p |
1 | SOH | DC1 | ! | 1 | A | Q | a | q |
2 | STX | DC2 | " | 2 | B | R | b | r |
3 | ETX | DC3 | # | 3 | C | S | c | s |
4 | EDT | DC4 | $ | 4 | D | T | d | t |
5 | ENQ | NAK | % | 5 | E | U | e | u |
6 | ACK | SYN | & | 6 | F | V | f | v |
7 | BEL | ETB | ' | 7 | G | W | g | w |
8 | BS | CAN | ( | 8 | H | X | h | z |
9 | HT | EM | ) | 9 | I | Y | i | y |
A | LF | SUB | * | : | J | Z | j | z |
B | VT | ESC | + | ; | K | [ | k | { |
C | FF | FS | , | < | L | \ | l | | |
D | CR | GS | - | = | M | ] | m | } |
E | SO | RS | . | > | N | ^ | n | ~ |
F | SI | US | / | ? | O | _ | o | DEL |
NUL | ALL ZEROS nebo TAPE FEED |
SOH | START OF HEADING, též START OF MESSAGE |
STX | START OF TEXT, též END OF ADDRESS |
ETX | END OF TEXT, též END OF MESSAGE |
EOT | END OF TRANSMISSION |
ENQ | ENQUIRY |
ACK | ACKNOWDEDGEMENT |
BEL | BELL |
BS | BACKSPACE, též FORMAT EFFECTOR |
HT | HORIZONTAL TAB |
LF | LINE FEED |
VT | VERTICAL TAB |
FF | FORM FEED |
CR | CARRIAGE RETURN |
SO | SHIFT OUT |
SI | SHIFT IN |
DLE | DATA LINK ESCAPE |
DC1 | DEVICE CONTROL 1 |
DC2 | DEVICE CONTROL 2 |
DC3 | DEVICE CONTROL 3 |
DC4 | DEVICE CONTROL 4 |
NAK | NEGATIVE ACKNOWLEDGE |
SYN | SYNCHRONOUS IDLE |
ETB | END OF TRANSMITTED BLOCK |
CAN | CANCEL |
EM | END OF MEDIUM |
SUB | SUBSTITUTE, též START OF SPECIAL SEQUENCE |
ESC | ESCAPE |
FS | FILE SEPARATOR |
GS | GROUP SEPARATOR |
RS | RECORD SEPARATOR |
US | UNIT SEPARATOR |
DEL | DELETE |
HEX | DEC | ASCII | HEX | DEC | ASCII | HEX | DEC | ASCII | HEX | DEC | ASCII |
00 | 0 | NUL | 20 | 32 | Space | 40 | 64 | @ | 60 | 96 | ` |
01 | 1 | SOH | 21 | 33 | ! | 41 | 65 | A | 61 | 97 | a |
02 | 2 | STX | 22 | 34 | " | 42 | 66 | B | 62 | 98 | b |
03 | 3 | ETX | 23 | 35 | # | 43 | 67 | C | 63 | 99 | c |
04 | 4 | EOT | 24 | 36 | $ | 44 | 68 | D | 64 | 100 | d |
05 | 5 | ENQ | 25 | 37 | % | 45 | 69 | E | 65 | 101 | e |
06 | 6 | ACK | 26 | 38 | & | 46 | 70 | F | 66 | 102 | f |
07 | 7 | BEL | 27 | 39 | ' | 47 | 71 | G | 67 | 103 | g |
08 | 8 | BS | 28 | 40 | ( | 48 | 72 | H | 68 | 104 | h |
09 | 9 | HT | 29 | 41 | ) | 49 | 73 | I | 69 | 105 | i |
0A | 10 | LF | 2A | 42 | * | 4A | 74 | J | 6A | 106 | j |
0B | 11 | VT | 2B | 43 | + | 4B | 75 | K | 6B | 107 | k |
0C | 12 | FF | 2C | 44 | , | 4C | 76 | L | 6C | 108 | 1 |
0D | 13 | CR | 2D | 45 | - | 4D | 77 | M | 6D | 109 | m |
0E | 14 | SO | 2E | 46 | . | 4E | 78 | N | 6E | 110 | n |
0F | 15 | SI | 2F | 47 | / | 4F | 79 | O | 6F | 111 | o |
10 | 16 | DLE | 30 | 48 | 0 | 50 | 80 | P | 70 | 112 | p |
11 | 17 | DC1 | 31 | 49 | 1 | 51 | 81 | Q | 71 | 113 | q |
12 | 18 | DC2 | 32 | 50 | 2 | 52 | 82 | R | 72 | 114 | r |
13 | 19 | DC3 | 33 | 51 | 3 | 53 | 83 | S | 73 | 115 | s |
14 | 20 | DC4 | 34 | 52 | 4 | 54 | 84 | T | 74 | 116 | t |
15 | 21 | NAK | 35 | 53 | 5 | 55 | 85 | U | 75 | 117 | u |
16 | 22 | SYN | 36 | 54 | 6 | 56 | 86 | V | 76 | 118 | v |
17 | 23 | ETB | 37 | 55 | 7 | 57 | 87 | W | 77 | 119 | w |
18 | 24 | CAN | 38 | 56 | 8 | 58 | 88 | X | 78 | 120 | x |
19 | 25 | EM | 39 | 57 | 9 | 59 | 89 | Y | 79 | 121 | y |
1A | 26 | SUB | 3A | 58 | : | 5A | 90 | Z | 7A | 122 | z |
1B | 27 | ESC | 3B | 59 | ; | 5B | 91 | [ | 7B | 123 | { |
1C | 28 | FS | 3C | 60 | < | 5C | 92 | \ | 7C | 124 | | |
1D | 29 | GS | 3D | 61 | = | 5D | 93 | ] | 7D | 125 | } |
1E | 30 | RS | 3E | 62 | > | 5E | 94 | ^ | 7E | 126 | ~ |
1F | 31 | US | 3F | 63 | ? | 5F | 95 | _ | 7F | 127 | DEL |
00 | NOP | 20 | --- | 40 | NOV B,B |
01 | LXI B,dble | 21 | LXI H,dble | 41 | NOV B,C |
02 | STAX B | 22 | SHLD adr | 42 | NOV B,D |
03 | INX B | 23 | INX H | 43 | MOV B,E |
04 | INR B | 24 | INR H | 44 | MOV B,H |
05 | DCR B | 25 | DCR H | 45 | MOV B,L |
06 | MVI B,byte | 26 | MVI H,byte | 46 | MOV B,M |
07 | RLC | 27 | DAA | 47 | MOV B,A |
08 | --- | 28 | --- | 48 | MOV C,B |
09 | DAD B | 29 | DAD H | 49 | MOV C,C |
0A | LDAX B | 2A | LHLD adr | 4A | MOV C,D |
0B | DCX B | 2B | DCX H | 4B | MOV C,E |
0C | INR C | 2C | INR L | 4C | MOV C,H |
0D | DCR C | 2D | DCR L | 4D | MOV C,L |
0E | MVI C,byte | 2E | MVI L,byte | 4E | MOV C,M |
0F | RRC | 2F | CMA | 4F | MOV C,A |
10 | --- | 30 | --- | 50 | MOV D,B |
11 | LXI B,dble | 31 | LXI SP,dble | 51 | MOV D,C |
12 | STAX D | 32 | STA adr | 52 | MOV D,D |
13 | INX D | 33 | INX SP | 53 | MOV D,E |
14 | INR D | 34 | INR M | 54 | MOV D,H |
15 | DCR D | 35 | DCR M | 55 | MOV D,L |
16 | MVI D,byte | 36 | MVI M,byte | 56 | MOV D,M |
17 | RAL | 37 | STC | 57 | MOV D,A |
18 | --- | 38 | --- | 58 | MOV E,B |
19 | DAD D | 39 | DAD SP | 59 | MOV E,C |
1A | LDAX D | 3A | LDA adr | 5A | MOV E,D |
1B | DCX D | 38 | DCX SP | 5B | MOV E,E |
1C | INR E | 3C | INA A | 5C | MOV E,H |
1D | DCR E | 3D | DCR A | 5D | MOV E,L |
1E | MVI E,byte | 3E | MVI A,byte | 5E | MOV E,M |
1F | RAR | 3F | CMC | 5F | MOV E,A |
60 | MOV H,B | 80 | ADD B | A0 | ANA B |
61 | MOV H,C | 81 | ADD C | A1 | ANA C |
62 | MOV H,D | 82 | ADD D | A2 | ANA D |
63 | MOV H,E | 83 | ADD E | A3 | ANA E |
64 | MOV H,H | 84 | ADD H | A4 | ANA H |
65 | MOV H,L | 85 | ADD L | A5 | ANA L |
66 | MOV H,M | 86 | ADD M | A6 | ANA N |
67 | MOV H,A | 87 | ADD A | A7 | ANA A |
68 | MOV L,B | 88 | ADC B | A8 | XRA B |
69 | MOV L,C | 89 | ADC C | A9 | XRA C |
6A | MOV L,D | 8A | ADC D | AA | XRA D |
6B | MOV L,E | 8B | ADC E | AB | XRA E |
6C | MOV L,H | 8C | ADC H | AC | XRA H |
6D | MOV L,L | 8D | ADC L | AD | XRA L |
6E | MOV L,M | 8E | ADC M | AE | XRA M |
6F | MOV L,A | 8F | ADC A | AF | XRA A |
70 | MOV M,B | 90 | SUB B | B0 | ORA B |
71 | MOV M,C | 91 | SUB C | B1 | ORA C |
72 | MOV M,D | 92 | SUB D | B2 | ORA D |
73 | MOV M,E | 93 | SUB E | B3 | ORA E |
74 | MOV M,H | 94 | SUB H | B4 | ORA H |
75 | MOV M,L | 95 | SUB L | B5 | ORA L |
76 | HLT | 96 | SUB M | B6 | ORA M |
77 | MOV M,A | 97 | SUB A | B7 | ORA A |
78 | MOV A,B | 98 | SBB B | B8 | CMP B |
79 | MOV A,C | 99 | SBB C | B9 | CMP C |
7A | MOV A,D | 9A | SBB D | BA | CMP D |
7B | MOV A,E | 9B | SBB E | BB | CMP E |
7C | MOV A,H | 9C | SBB H | BC | CMP H |
7D | MOV A,L | 9D | SBB L | BD | CMP L |
7E | MOV A,M | 9E | SBB M | BE | CMP M |
7F | MOV A, A | 9F | SBB A | BF | CMP A |
C0 | RNZ | E0 | RPO | ||
C1 | POP B | E1 | POP H | ||
C2 | JNZ adr | E2 | JPO adr | ||
C3 | JMP adr | E3 | XTHL | ||
C4 | CNZ adr | E4 | CPO adr | ||
C5 | PUSH B | E5 | PUSH H | ||
C6 | ADI byte | E6 | ANI byte | ||
C7 | RST 0 | E7 | RST 4 | ||
C8 | RZ | E8 | RPE | ||
C9 | RET | E9 | PCHL | ||
CA | JZ adr | EA | JPE adr | ||
CB | --- | EB | XCHG | ||
CC | CZ adr | EC | CPE adr | ||
CD | CALL adr | ED | --- | ||
CE | ACI byte | EE | XRI byte | ||
CF | RST 1 | EF | RST 5 | ||
D0 | RNC | F0 | RP | ||
D1 | POP D | F1 | POP PSW | ||
D2 | JNC adr | F2 | JP adr | ||
D3 | OUT byte | F3 | DI | ||
D4 | CNC adr | F4 | CP adr | ||
D5 | PUSH D | F5 | PUSH PSW | ||
D6 | SUI byte | F6 | ORI byte | ||
D7 | RST 2 | F7 | RST 6 | ||
D8 | RC | F8 | RM | ||
D9 | --- | F9 | SPHL | ||
DA | JC adr | FA | JM adr | ||
DB | IN byte | FB | EI | ||
DC | CC adr | FC | CM adr | ||
DD | --- | FD | --- | ||
DE | SBI byte | FE | CPI byte | ||
DF | RST 3 | FF | RST 7 |
] [ & \ _ % V C D F G R
Není realizována funkce <--. Klávesa CR provádí zároveň funkci LF. Klávesa, označená LF má ve skutečnosti funkci BS, tj. krok zpět.
Listing odpovídá originálu až na nezbytně nutné změny vynucené použitím jiného překladače, TASM z důvodů kontroly chyb. Původně napsáno v "8080/8085 CROSS ASSEMBLER CASM80 V 2-04".
2017 0D62 AF HOME XRA A 2018 0D63 32 22 40 STA POZICE 2019 0D66 32 21 40 ZZZ5 STA RADEK 2020 0D69 C9 RET 2021 0D6A ;MIKRO BASIC JPR-1 2022 0D6A ;**************************************** 2023 0D6A ; 2024 0D6A ; KLAVESNICE JPR-1 2025 0D6A ; 2026 0D6A ;**************************************** 2027 0D6A ; 2028 0D6A ;ZACATEK 2029 0D6A ; 2030 0D6A C5 CI PUSH B 2031 0D6B D5 PUSH D 2032 0D6C E5 PUSH H 2033 0D6D 0E 80 KLIN10 MVI C,80H 2034 0D6F 16 05 KLIN20 MVI D,5 2035 0D71 06 1E MVI B,1EH 2036 0D73 26 00 MVI H,0 2037 0D75 ; 2038 0D75 ;GENERACE SIGNALU PRO SLOUPEC 2039 0D75 ; 2040 0D75 3A 00 40 KLIN30 LDA PORT24 2041 0D78 E6 E0 ANI 0E0H 2042 0D7A B0 ORA B 2043 0D7B 32 00 24 STA 2400H 2044 0D7E 78 MOV A,B 2045 0D7F 37 STC 2046 0D80 17 RAL 2047 0D81 E6 1F ANI 1FH 2048 0D83 47 MOV B,A 2049 0D84 3A 00 24 LDA 2400H 2050 0D87 FE FF CPI 0FFH 2051 0D89 C4 C0 0D CNZ KLIN50 2052 0D8C 15 DCR D 2053 0D8D C2 75 0D JNZ KLIN30 2054 0D90 ; 2055 0D90 ;PROBEHL CELY CYKLUS , 5 SPOUPCU 2056 0D90 ; 2057 0D90 CD E6 0D CALL SHOF 2058 0D93 79 MOV A,C 2059 0D94 FE 01 CPI 1 2060 0D96 CA A4 0D JZ KLIN40 2061 0D99 DA 6F 0D JC KLIN20 2062 0D9C FE 80 CPI 80H 2063 0D9E CA B5 0D JZ KLIN90 2064 0DA1 C3 6D 0D JMP KLIN10 2065 0DA4 ; 2066 0DA4 ;PLATNY ZNAK A NAVRAT 2067 0DA4 ; 2068 0DA4 7D KLIN40 MOV A,L 2069 0DA5 84 ADD H 2070 0DA6 21 FA 0D LXI H,TABZN 2071 0DA9 4F MOV C,A 2072 0DAA 06 00 MVI B,0 2073 0DAC 09 DAD B 2074 0DAD CD 66 0E CALL PIPO 2075 0DB0 7E MOV A,M 2076 0DB1 E1 POP H 2077 0DB2 D1 POP D 2078 0DB3 C1 POP B 2079 0DB4 C9 RET 2080 0DB5 ; 2081 0DB5 ;KLAVESNICE V KLIDU 2082 0DB5 ; 2083 0DB5 0E 90 KLIN90 MVI C,90H 2084 0DB7 0D KLIN99 DCR C 2085 0DB8 C2 B7 0D JNZ KLIN99 2086 0DBB 0E 00 MVI C,0 2087 0DBD C3 6F 0D JMP KLIN20 2088 0DC0 ; 2089 0DC0 ;PROHLEDANI RADKU 2090 0DC0 ; 2091 0DC0 1E 08 KLIN50 MVI E,8 2092 0DC2 0F KLIN60 RRC 2093 0DC3 D4 CB 0D CNC KLIN70 2094 0DC6 1D DCR E 2095 0DC7 C2 C2 0D JNZ KLIN60 2096 0DCA C9 RET 2097 0DCB ; 2098 0DCB ;SESTAVENI KODU KLAVESY 2099 0DCB ; 2100 0DCB F5 KLIN70 PUSH PSW 2101 0DCC 7A MOV A,D 2102 0DCD 3D DCR A 2103 0DCE 07 RLC 2104 0DCF 07 RLC 2105 0DD0 07 RLC 2106 0DD1 E6 38 ANI 38H 2107 0DD3 1D DCR E 2108 0DD4 B3 ORA E 2109 0DD5 1C INR E 2110 0DD6 FE 07 CPI 7 2111 0DD8 CA DF 0D JZ KLIN80 2112 0DDB 6F MOV L,A 2113 0DDC 0C INR C 2114 0DDD F1 POP PSW 2115 0DDE C9 RET 2116 0DDF ; 2117 0DDF ;PRIZNAK SHIFT 2118 0DDF ; 2119 0DDF 26 28 KLIN80 MVI H,28H 2120 0DE1 CD F2 0D CALL SHON 2121 0DE4 F1 POP PSW 2122 0DE5 C9 RET 2123 0DE6 ; 2124 0DE6 ;SIGNALIZACE SHIFT 2125 0DE6 ; 2126 0DE6 3A 00 40 SHOF LDA PORT24 2127 0DE9 E6 D0 ANI 0D0H 2128 0DEB 32 00 40 SHOF10 STA PORT24 2129 0DEE 32 00 24 STA 2400H 2130 0DF1 C9 RET 2131 0DF2 3A 00 40 SHON LDA PORT24 2132 0DF5 F6 20 ORI 20H 2133 0DF7 C3 EB 0D JMP SHOF10 2134 0DFA ; 2135 0DFA ;TABULKA ASCII 2136 0DFA ; 2137 0DFA 30500D083151 TABZN .DB "0P",0DH,08H,"1QA" 2137 0E00 41 2138 0E01 0E394F4C2032 .DB 0EH,"9OL 2W" 2138 0E07 57 2139 0E08 535A38494B4D .DB "SZ8IKM3EDX" 2139 0E0E 33454458 2140 0E12 37554A4E3452 .DB "7UJN4RFC6Y" 2140 0E18 46433659 2141 0E1C 484235544756 .DB "HB5TGV)" 2141 0E22 29 2142 0E23 ; 2143 0E23 ;KODY PRI SHIFT 2144 0E23 ; 2145 0E23 7F0D08215141 .DB 07FH,0DH,08H,"!QA" 2146 0E29 0E28233D203F .DB 0EH,"(#= ?WSZ" 2146 0E2F 57535A 2147 0E32 3E402A2E2245 .DB ">@*.",22H,"E&X<:" 2147 0E38 26583C3A 2148 0E3C 2D2C24255C5B .DB "-,$%",5CH,"[",27H,"/+;^T_]" 2148 0E42 272F2B3B5E545F5D 2149 0E4A ; 2150 0E4A ;PIPNUTI 2151 0E4A ; 2152 0E4A C5 PIP PUSH B 2153 0E4B 3A 00 40 LDA PORT24 2154 0E4E F6 40 ORI 40H 2155 0E50 32 00 24 STA 2400H 2156 0E53 0E 42 MVI C,42H 2157 0E55 0D PIP20 DCR C 2158 0E56 C2 55 0E JNZ PIP20 2159 0E59 E6 B0 ANI 0B0H 2160 0E5B 32 00 24 STA 2400H 2161 0E5E 0E 50 MVI C,50H 2162 0E60 0D PIP30 DCR C 2163 0E61 C2 60 0E JNZ PIP30 2164 0E64 C1 POP B 2165 0E65 C9 RET 2166 0E66 ; 2167 0E66 ;ZAPIPANI 2168 0E66 ; 2169 0E66 11 40 00 PIPO LXI D,40H 2170 0E69 CD 4A 0E PIPO10 CALL PIP 2171 0E6C 1B DCX D 2172 0E6D 7A MOV A,D 2173 0E6E B3 ORA E 2174 0E6F C2 69 0E JNZ PIPO10 2175 0E72 C9 RET 2176 0E73 ; 2177 0E73 ;*************************************** 2178 0E73 ; 2179 0E73 ; MIKRO MONITOR JPR-1 2180 0E73 ; 2181 0E73 ;*************************************** 2182 0E73 ; 2183 0E73 7C PRHL MOV A,H 2184 0E74 CD A5 0A CALL WRIT2 2185 0E77 7D MOV A,L 2186 0E78 C3 A5 0A JMP WRIT2 2187 0E7B ; 2188 0E7B ;VSTUP HEXA ADRESY 2189 0E7B ; 2190 0E7B 21 00 00 MEXPR LXI H,0 2191 0E7E CD 6A 0D MEXO CALL CI 2192 0E81 4F MOV C,A 2193 0E82 CD 07 40 CALL CO |
Listing odpovídá originálu až na nezbytně nutné změny vynucené použitím jiného překladače, TASM z důvodů kontroly chyb. Původně napsáno v "8080/8085 CROSS ASSEMBLER CASM80 V 2-04".
2017 0D62 AF HOME XRA A 2018 0D63 32 22 40 STA POZICE 2019 0D66 32 21 40 ZZZ5 STA RADEK 2020 0D69 C9 RET 2021 0D6A ;MIKRO BASIC JPR-1 2022 0D6A ;******************************************** 2023 0D6A ; 2024 0D6A ; KLAVESNICE JPR-1 2025 0D6A ; 2026 0D6A ;******************************************** 2027 0D6A ; 2028 0D6A ;ZACATEK 2029 0D6A ; 2030 0D6A C5 CI PUSH B 2031 0D6B D5 PUSH D 2032 0D6C E5 PUSH H 2033 0D6D CD 9C 0D ZZZ9 CALL ZZZ6 2034 0D70 FE 20 CPI ' ' ;SPACE 2035 0D72 DA 7E 0D JC ZZZ7 2036 0D75 FE 60 CPI 60H 2037 0D77 D2 7E 0D JNC ZZZ7 2038 0D7A E1 ZZZ8 POP H 2039 0D7B D1 POP D 2040 0D7C C1 POP B 2041 0D7D C9 RET 2042 0D7E ; 2043 0D7E FE 7F ZZZ7 CPI 127 ; DEL 2044 0D80 CA 7A 0D JZ ZZZ8 2045 0D83 FE 0D CPI 0DH ; CR 2046 0D85 CA 7A 0D JZ ZZZ8 2047 0D88 FE 08 CPI 8 ; BS 2048 0D8A CA 7A 0D JZ ZZZ8 2049 0D8D FE 61 CPI 'A'+20H 2050 0D8F DA 6D 0D JC ZZZ9 2051 0D92 FE 7B CPI 'Z'+20H+1 2052 0D94 D2 6D 0D JNC ZZZ9 2053 0D97 D6 20 SUI 20H 2054 0D99 C3 7A 0D JMP ZZZ8 2055 0D9C ; 2056 0D9C 21 FF 27 ZZZ6 LXI H,27FFH 2057 0D9F 36 02 MVI M,2 2058 0DA1 7E ZZZ10 MOV A,M 2059 0DA2 0F RRC 2060 0DA3 DA A1 0D JC ZZZ10 2061 0DA6 23 INX H 2062 0DA7 7E MOV A,M 2063 0DA8 2F CMA 2064 0DA9 E6 7F ANI 127 2065 0DAB F5 PUSH PSW 2066 0DAC 2B DCX H 2067 0DAD 36 03 MVI M,3 2068 0DAF 7E ZZZ11 MOV A,M 2069 0DB0 0F RRC 2070 0DB1 D2 AF 0D JNC ZZZ11 2071 0DB4 36 02 MVI M,2 2072 0DB6 F1 POP PSW 2073 0DB7 C9 RET 2074 0DB8 ; 2075 0DB8 C2 69 0E ZZZ12 JNZ PIPO10 2076 0DBB 3E 02 MVI A,2 2077 0DBD 32 00 24 STA 2400H 2078 0DC0 C9 RET 2079 0DC1 ; 2080 0E4A .ORG 0E4AH 2081 0E4A ; 2082 0E4A ; PIPNUTI 2083 0E4A ; 2084 0E4A C5 PIP PUSH B 2085 0E4B 3A 00 40 LDA PORT24 2086 0E4E 3E 00 MVI A,0 2087 0E50 32 00 24 STA 2400H 2088 0E53 0E 42 MVI C,42H 2089 0E55 0D PIP20 DCR C 2090 0E56 C2 55 0E JNZ PIP20 2091 0E59 E6 B0 ANI 0B0H 2092 0E5B 32 00 00 STA 0 2093 0E5E 0E 50 MVI C,50H 2094 0E60 0D PIP30 DCR C 2095 0E61 C2 60 0E JNZ PIP30 2096 0E64 C1 POP B 2097 0E65 C9 RET 2098 0E66 ; 2099 0E66 ; ZAPIPANI 2100 0E66 ; 2101 0E66 11 40 00 PIPO LXI D,40H 2102 0E69 CD 4A 0E PIPO10 CALL PIP 2103 0E6C 1B DCX D 2104 0E6D 7A MOV A,D 2105 0E6E B3 ORA E 2106 0E6F C3 B8 0D JMP ZZZ12 2107 0E72 C9 RET 2108 0E73 ; 2109 0E73 ;*************************************** 2110 0E73 ; 2111 0E73 ; MIKRO MONITOR JPR-1 2112 0E73 ; 2113 0E73 ;*************************************** 2114 0E73 ; 2115 0E73 7C PRHL MOV A,H 2116 0E74 CD A5 0A CALL WRIT2 2117 0E77 7D MOV A,L 2118 0E78 C3 A5 0A JMP WRIT2 2119 0E7B ; 2120 0E7B ;VSTUP HEXA ADRESY 2121 0E7B ; 2122 0E7B 21 00 00 MEXPR LXI H,0 2123 0E7E CD 6A 0D MEXO CALL CI 2124 0E81 4F MOV C,A 2125 0E82 CD 07 40 CALL CO |
Základní verze (JPR-1, AND-1, REM-1 s min. 2kB RAM nebo REM-1 a RAM-1, DSM-1, ANK-1)
Minimalistická verze s 1kB RAM (JPR-1, AND-1, DSM-1, ANK-1. RAM a EPROM osazené na JPR-1)
Minimalistická verze s 1kB RAM (JPR-1, AND-1, DSM-1, C259.11 nebo C262.3. RAM a EPROM osazené na JPR-1)
Ú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