Ú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


8 bity / SAPI-1 / Programové vybavení / ZPS-1 / MikroBASIC


OCR návodu PROGRAMOVÉ VYBAVENÍ











TESLA
ELTOS
OBOROVÝ
PODNIK
DIZ
SAPI 1


PROGRAMOVÉ VYBAVENÍ











OBSAH

  1. Úvod
    1. Klávesnice ANK-1
    2. Technický popis

  2. Mikro BASIC
    1. Všeobecné údaje
    2. Aritmetické operátory
    3. Relační operátory
    4. Jednoduché proměnné
    5. Indexovaná proměnná
    6. Textové řetězec a textový operátor

  3. Povely
    1. LIST, LLIST
    2. RUN
    3. NEW
    4. MONITOR
    5. RAM
    6. LOAD, SAVE
    7. REWIIND
    8. Zprávy, které vydává Mikro BASIC

  4. Příkazy
    1. LET
    2. FOR TO NEXT STEP
    3. GOTO
    4. GOSUB, RETURN
    5. REM
    6. INPUT
    7. PRINT, LPRINT
    8. TAB
    9. HARD, DISPL
    10. IF
    11. END, STOP
    12. CLEAR
    13. CLS
    14. CALL
    15. POKE
    16. OUT
    17. OUTCHAR
    18. BYTE, WORD
    19. MASK
    20. WAIT
    21. BEEP
    22. I$
    23. O$

  5. Funkce
    1. RND
    2. ABS
    3. HEX
    4. INCHAR
    5. PEEK
    6. IN, INM
    7. LEN, TOP, SIZIS

  6. Závěrem několik příkladů
  7. Mikromonitor SAPI-1
    1. Příkazy Mikromonitoru
    2. Příkaz D
    3. Příkazy S a G
    4. Příkazy R a B

  8. Výpis programu
    1. Důležité adresy programu
    2. Jak pracuje interpret
    3. Realizace programu v BASIC
    4. Zpracováni funkcí
    5. Přeadresování interpretu

  9. Souhrn
    1. Řádky
    2. Návěští
    3. Klíčová slova
    4. Povely
    5. Příkazy
    6. Funkce
    7. Příkazy Monitoru
    8. Operátory
    9. Hlášení a chyby
    10. Adresy příkazů BASIC

Přílohy:

  1. Stručný přehled programového vybavení SAPI - 1
  2. Kód ASCII
  3. Strojový kód MHB 8080A
  4. Důležitá upozorněni
  5. Driver klávesnice ANK-1
  6. Driver klávesnice CONSUL 259.11 (262.3)

VÝPIS PROGRAMU:



PROGRAMOVÉ VYBAVENÍ SAPI-1


  1. ÚVOD

  2. 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ů.

    1. klávesnice ANK-1

    2. 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.

    3. technický popis

    4. 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



  3. MIKRO BASIC

    1. všeobecné údaje

    2. 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.

    3. aritmetické operátory

    4. Pro výpočty lze použít těchto operátorů:
      Operátor   VýznamPriorita
      +plus pro sčítání4
      -mínus jako znaménko1
      -mínus pro odčítání4
      *hvězdička pro násobení2
      /lomítko pro děleni3

      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.

    5. relační operátory

    6. Pro porovnávání výsledků lze použít těchto operátorů:
      Operátor   Význam
      >větší než
      <menši než
      =rovná se
      #není rovno
      >=je větší nebo rovnonelze 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,

    7. jednoduché proměnné

    8. 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.

    9. indexovaná proměnná

    10. 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.

    11. textový řetězec a textový operátor

    12. 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.


  4. POVELY

  5. 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.

    1. LIST, LLIST

    2. 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.

    3. RUN

    4. 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.

    5. NEW

    6. 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.

    7. MONITOR

    8. 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.

    9. RAM

    10. 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.

    11. LOAD a SAVE

    12. 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.

    13. REWIND

    14. 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.

    15. zprávy programu Mikro BASIC

    16. 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
      



  6. PŘÍKAZY

  7. 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
    


    1. příkaz LET

    2. 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.

    3. FOR TO NEXT STEP

    4. 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
      


    5. GOTO

    6. 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.

    7. GOSUB. RETURN

    8. 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
      


    9. REM

    10. Příkaz REM má význam zejména pro dokumentování programu. Je nevýkonný. Při omezené paměti s pokud nemáte připojenou tiskárnu nemá smysl jej používat, neboť jen zabírá vzácný paměťový prostor. I později, pokud již budete mít více místa lze řešit věc tak, že pro dokumentaci na tiskárně si nějaké příkazy do programu zasunete, ale na paměťové medium je již nezapíšete a to tak, že před vydáním povelu SAVE řádky s komentářem opět zrušíte. Jejich výhodnost oceníte teprve tehdy, budete-li se muset vracet k programům, napsaným dříve.
    11. INPUT

    12. Příkaz slouží pro zadávání dat v průběhu výpočtu z klávesnice. Jednim příkazem INPUT můžeme zadat hodnoty několika jednoduchých proměnných nebo prvků indexované proměnné. Očekávání vstupu oznámí interpret dvojtečkou Současně s ní může být vypsán název proměnné; libovolný text nebo obojí. Vhodná varianta se voli tak, jak je ukázáno v dalším příkladu.

      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
      


    13. PRINT, LPRINT

    14. 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ě.

    15. TAB

    16. 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.

    17. HARD, DISPL

    18. 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.

    19. IF

    20. 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:
      


    21. END, STOP

    22. 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.

    23. CLEAR

    24. 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).

    25. CLS

    26. CLS je nejjednodušší příkaz, kterým se vynuluje (vlastně vymezeruje) obrazovka displeje a kursor se nastaví na začátek prvního řádku.

    27. CALL

    28. 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
      


    29. POKE

    30. 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
      


    31. OUT

    32. 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ů.

    33. OUTCHAR

    34. 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
      


    35. BYTE, WORD

    36. Dva speciální příkazy Mikro BASIC, které ve větších versích jazyka nejsou.Parametr v závorce (cokoli) představuje dekadickou hodnotu, která bude vytištěna v případě příkazu BYTE jako hexadecimální číslo 00 až FF, v případě WORD jako hexadecimální číslo v rozsahu 0000 až FFFF. Rozsah parametru u příkazu BYTE není opět kontrolován. Uvádíme příklad, který dokáže vypsat hexadecimální obsah paměti JPR-1 od adresy 0 do adresy 0FFF tak, jak jej vypisují hexadecimálně orientované monitory.



         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
      


    37. MASK

    38. 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.

    39. WAIT

    40. 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.

    41. BEEP

    42. 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
      


    43. I$

    44. 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.

    45. O$

    46. 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
      >
      



  8. FUNKCE

  9. 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.

    1. RND

    2. 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.

    3. ABS

    4. 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
      >
      


    5. HEX

    6. 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.

    7. INCHAR

    8. 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
      


    9. PEEK

    10. 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
      


    11. IN. INM

    12. 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
      


    13. LEN, TOP SIZE

    14. 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
      



  10. ZÁVĚREM NĚKOLIK PŘÍKLADŮ

  11. 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
    



  12. MIKROMONITOR SAPI-1

  13. 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.

    1. příkazy Mikromonitoru

    2. 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.

    3. příkaz D

    4. 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.

    5. příkazy S a G

    6. 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
      >
      


    7. příkazy R a B

    8. 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.



  14. VÝPIS PROGRAMU

  15. 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.

    1. důležité adresy programu

    2. 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.

    3. jak pracuje interpret ?

    4. 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.

    5. realizace programu v BASIC

    6. 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.

    7. 8zpracování funkcí

    8. 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".

    9. přeadresování interpretu

    10. 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í.)


  16. SOUHRN

    1. řádky

    2. 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.

    3. návěští

    4. 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.

    5. klíčová slova

    6. 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.

    7. povely

    8. 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.

    9. příkazy

    10. 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.

    11. funkce

    12. 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é.

    13. příkazy Monitoru

    14. 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.

    15. operátory

    16. 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?

    17. hlášení a chyby

    18. 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.

    19. adresy příkazů BASIC

    20. LIST 0359 RETURN   042B   LOAD   0B23
      LLIST 0356 REM 050C RND 06C4
      GOTO 0339 CLEAR 051B NEW 030D
      LPRINT   03A4   CLS 0923 RUN 0316



  1. příloha

  2. 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
    PRINT 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.

  3. Přtloha

  4. kód ASCII

    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:

    1. první dva sloupce jsou tvořeny znaky, které nemají grafické zobrazeni a slouží jako řídící nebo služební znaky,
    2. dalších 6 sloupců je tvořeno grafickými znaky,
    3. vyjímečným znakem je DEL, který je představován binárně samými jedničkami a slouží k předěrování chybného znaku na děrné pásce,
    4. pro jednoduchá přídavná zařízení je možno použit šestibitový kód (sloupce 2, 3, 4 a 5),
    5. kód se jednoduše dekóduje podle jednotlivých sloupců. Dekódování řádků je usnadněno dodržením binárního vyjádření čísel 0 až 9.

    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.

    1. Tabulka

    2. tabulka kódu ASCII

      01234567
      0   NULDLESP   0@P-p
      1SOH   DC1!1AQaq
      2STXDC2   "2BRbr
      3ETXDC3#3CS   cs
      4EDTDC4$4DTdt
      5ENQNAK%5E   Ueu
      6ACKSYN&6FVfv
      7BELETB'7GWg   w
      8BSCAN(8HXhz   
      9HTEM)9IYiy
      ALFSUB*:JZjz
      BVTESC+;K[k{
      CFFFS,<L\l|
      DCRGS-=   M]m}
      ESORS.>N^n~
      FSIUS/?O_oDEL

    3. Tabulka

    4. názvy řídících znaků kódu ASCII

      NULALL ZEROS nebo TAPE FEED
      SOH   START OF HEADING, též START OF MESSAGE
      STXSTART OF TEXT, též END OF ADDRESS
      ETXEND OF TEXT, též END OF MESSAGE
      EOTEND OF TRANSMISSION
      ENQENQUIRY
      ACKACKNOWDEDGEMENT
      BELBELL
      BSBACKSPACE, též FORMAT EFFECTOR
      HTHORIZONTAL TAB
      LFLINE FEED
      VTVERTICAL TAB
      FFFORM FEED
      CRCARRIAGE RETURN
      SOSHIFT OUT
      SISHIFT IN
      DLEDATA LINK ESCAPE
      DC1DEVICE CONTROL 1
      DC2DEVICE CONTROL 2
      DC3DEVICE CONTROL 3
      DC4DEVICE CONTROL 4
      NAKNEGATIVE ACKNOWLEDGE
      SYNSYNCHRONOUS IDLE
      ETBEND OF TRANSMITTED BLOCK
      CANCANCEL
      EMEND OF MEDIUM
      SUBSUBSTITUTE, též START OF SPECIAL SEQUENCE
      ESCESCAPE
      FSFILE SEPARATOR
      GSGROUP SEPARATOR
      RSRECORD SEPARATOR
      USUNIT SEPARATOR
      DELDELETE

    5. Tabulka

    6. Hexadecimální a dekadické hodnoty kódu ASCII

      HEX   DEC   ASCII          HEX   DEC   ASCIIHEX    DEC   ASCII          HEX   DEC   ASCII
      000NUL2032Space       4064@6096 `
      011SOH2133!4165A6197a
      022STX2234"4266B6298b
      033ETX2335#4367C6399c
      044EOT2436$4468D64100d
      055ENQ2537%4569E65101e
      066ACK2638&4670F66102f
      077BEL2739'4771G67103g
      088BS2840(4872H68104h
      099HT2941)4973I69105i
      0A10LF2A42*4A74J6A106j
      0B11VT2B43+4B75K6B107k
      0C12FF2C44,4C76L6C1081
      0D13CR2D45-4D77M6D109m
      0E14SO2E46.4E78N6E110n
      0F15SI2F47/4F79O6F111o
      1016DLE304805080P70112p
      1117DC1314915181Q71113q
      1218DC2325025282R72114r
      1319DC3335135383S73115s
      1420DC4345245484T74116t
      1521NAK355355585U75117u
      1622SYN365465686V76118v
      1723ETB375575787W77119w
      1824CAN385685888X78120x
      1925EM395795989Y79121y
      1A26SUB3A58:5A90Z7A122z
      1B27ESC3B59;5B91[7B123{
      1C28FS3C60<5C92\7C124|
      1D29GS3D61=5D93]7D125}
      1E30RS3E62>5E94^7E126~
      1F31US3F63?5F95_7F127DEL

  5. Příloha

  6. strojový kód MHB 8080

    00   NOP20   ---40   NOV B,B
    01LXI B,dble21LXI H,dble41NOV B,C
    02STAX B22SHLD adr42NOV B,D
    03INX B23INX H43MOV B,E
    04INR B24INR H44MOV B,H
    05DCR B25DCR H45MOV B,L
    06MVI B,byte      26MVI H,byte       46MOV B,M
    07RLC27DAA47MOV B,A
    08---28---48MOV C,B
    09DAD B29DAD H49MOV C,C
    0ALDAX B2ALHLD adr4AMOV C,D
    0BDCX B2BDCX H4BMOV C,E
    0CINR C2CINR L4CMOV C,H
    0DDCR C2DDCR L 4DMOV C,L
    0EMVI C,byte2EMVI L,byte4EMOV C,M
    0FRRC2FCMA4FMOV C,A
    10---30---50MOV D,B
    11LXI B,dble31LXI SP,dble51MOV D,C
    12STAX D32STA adr52MOV D,D
    13INX D33INX SP53MOV D,E
    14INR D34INR M54MOV D,H
    15DCR D35DCR M55MOV D,L
    16MVI D,byte36MVI M,byte56MOV D,M
    17RAL37STC57MOV D,A
    18---38---58MOV E,B
    19DAD D39DAD SP59MOV E,C
    1ALDAX D3ALDA adr5AMOV E,D
    1BDCX D38DCX SP5BMOV E,E
    1CINR E3CINA A5CMOV E,H
    1DDCR E3DDCR A5DMOV E,L
    1EMVI E,byte3EMVI A,byte5EMOV E,M
    1FRAR3FCMC5FMOV E,A
     
    60MOV H,B80ADD BA0ANA B
    61MOV H,C81ADD CA1ANA C
    62MOV H,D82ADD DA2ANA D
    63MOV H,E83ADD EA3ANA E
    64MOV H,H84ADD HA4ANA H
    65MOV H,L85ADD LA5ANA L
    66MOV H,M86ADD MA6ANA N
    67MOV H,A87ADD AA7ANA A
    68MOV L,B88ADC BA8XRA B
    69MOV L,C89ADC CA9XRA C
    6AMOV L,D8AADC DAAXRA D
    6BMOV L,E8BADC EABXRA E
    6CMOV L,H8CADC HACXRA H
    6DMOV L,L8DADC LADXRA L
    6EMOV L,M8EADC MAEXRA M
    6FMOV L,A8FADC AAFXRA A
    70MOV M,B90SUB BB0ORA B
    71MOV M,C91SUB CB1ORA C
    72MOV M,D92SUB DB2ORA D
    73MOV M,E93SUB EB3ORA E
    74MOV M,H94SUB HB4ORA H
    75MOV M,L95SUB LB5ORA L
    76HLT96SUB MB6ORA M
    77MOV M,A97SUB AB7ORA A
    78MOV A,B98SBB BB8CMP B
    79MOV A,C99SBB CB9CMP C
    7AMOV A,D9ASBB DBACMP D
    7BMOV A,E9BSBB EBBCMP E
    7CMOV A,H9CSBB HBCCMP H
    7DMOV A,L9DSBB LBDCMP L
    7EMOV A,M9ESBB MBECMP M
    7FMOV A, A9FSBB ABFCMP A
     
    C0RNZE0RPO
    C1POP BE1POP H
    C2JNZ adrE2JPO adr
    C3JMP adrE3XTHL
    C4CNZ adrE4CPO adr
    C5PUSH BE5PUSH H
    C6ADI byteE6ANI byte
    C7RST 0E7RST 4
    C8RZE8RPE
    C9RETE9PCHL
    CAJZ adrEAJPE adr
    CB---EBXCHG
    CCCZ adrECCPE adr
    CDCALL adrED---
    CEACI byteEEXRI byte
    CFRST 1EFRST 5
    D0RNCF0RP
    D1POP DF1POP PSW
    D2JNC adrF2JP adr
    D3OUT byteF3DI
    D4CNC adrF4CP adr
    D5PUSH DF5PUSH PSW
    D6SUI byteF6ORI byte
    D7RST 2F7RST 6
    D8RCF8RM
    D9---F9SPHL
    DAJC adrFAJM adr
    DBIN byteFBEI
    DCCC adrFCCM adr
    DD---FD---
    DESBI byteFECPI byte
    DFRST 3FFRST 7

  7. Příloha

  8. Důležité upozornění

    1. V překladové tabulce membránové klávesnice (od adresy DFAH) byly přidány následující znaky nad odpovídajícími písmeny; na vlastní klávesnici je již z výrobních důvodů nebylo možno umístit:
    2. ] [ & \ _ %
      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.

    3. Je přípustné zkrácená notace příkazů a povelů BASIC a Monitoru. Příklady: PRINT:=P., FOR:=F., STEP:=ST., NEXT:=N., BYTE:=BY., TAB:=T., LOAD:=LO., SAVE:=S. atd. Program sice bude nepřehledný, zvláště při zápisu bez mezer a do více příkazových řádků (:), ale do programového bufferu se vejde podstatně delší program.

    4. Pokud si připojíte podle HV příručky klávesnici Consul, musíte provést výměnu jedné EPROM za jinou. Standardní verse programového vybavení je 2.4 a zajišťuje membránovou klávesnici (údaj verse je na adr.FFFH). Consul je ošetřen versi 3.1 (viz přílohu výpisu programu). Obě verse se liší jen od adr.D6AH do adr.E72H.
  9. Driver klávesnice ANK-1

  10. 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
    


  11. Driver klávesnice CONSUL C259.11 (C262.3)

  12. 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
    




VYDÁNO PRO POTŘEBU UŽIVATELŮ POČÍTAČE SAPI-1

název : PROGRAMOVÉ VYBAVENÍ SAPI-1
zpracoval :TESLA ELTOS ZAR 1983
schválil :TESLA ELTOS DIZ 1983
vydal :TESLA ELTOS DIZ 1983
náklad : 2 300 výtisků
rok : 1983



OBSAH

  1. Úvod
    1. Klávesnice ANK-1
    2. Technický popis

  2. Mikro BASIC
    1. Všeobecné údaje
    2. Aritmetické operátory
    3. Relační operátory
    4. Jednoduché proměnné
    5. Indexovaná proměnná
    6. Textové řetězec a textový operátor

  3. Povely
    1. LIST, LLIST
    2. RUN
    3. NEW
    4. MONITOR
    5. RAM
    6. LOAD, SAVE
    7. REWIIND
    8. Zprávy, které vydává Mikro BASIC

  4. Příkazy
    1. LET
    2. FOR TO NEXT STEP
    3. GOTO
    4. GOSUB, RETURN
    5. REM
    6. INPUT
    7. PRINT, LPRINT
    8. TAB
    9. HARD, DISPL
    10. IF
    11. END, STOP
    12. CLEAR
    13. CLS
    14. CALL
    15. POKE
    16. OUT
    17. OUTCHAR
    18. BYTE, WORD
    19. MASK
    20. WAIT
    21. BEEP
    22. I$
    23. O$

  5. Funkce
    1. RND
    2. ABS
    3. HEX
    4. INCHAR
    5. PEEK
    6. IN, INM
    7. LEN, TOP, SIZIS

  6. Závěrem několik příkladů
  7. Mikromonitor SAPI-1
    1. Příkazy Mikromonitoru
    2. Příkaz D
    3. Příkazy S a G
    4. Příkazy R a B

  8. Výpis programu
    1. Důležité adresy programu
    2. Jak pracuje interpret
    3. Realizace programu v BASIC
    4. Zpracováni funkcí
    5. Přeadresování interpretu

  9. Souhrn
    1. Řádky
    2. Návěští
    3. Klíčová slova
    4. Povely
    5. Příkazy
    6. Funkce
    7. Příkazy Monitoru
    8. Operátory
    9. Hlášení a chyby
    10. Adresy příkazů BASIC

Přílohy:

  1. Stručný přehled programového vybavení SAPI - 1
  2. Kód ASCII
  3. Strojový kód MHB 8080A
  4. Důležitá upozorněni
  5. Driver klávesnice ANK-1
  6. Driver klávesnice CONSUL 259.11 (262.3)

VÝPIS PROGRAMU:



Ú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


8 bity / SAPI-1 / Programové vybavení / ZPS-1 / MikroBASIC



SAPI.cz - web o československých osmibitech, zejména SAPI-1. Provozuje EC1045 od roku 2011
Za korekce češtiny dekuji: MELSOFTovi, Silliconovi, Martinu Lukáškovi a NOSTALCOMPovi

Když začínám blbnout z 8bitů tak se chodím léčit mezi otaku.
Animefest.cz