


          *************************
          **                     **
          **   Vše o  MZ - 800   **
          **                     **
          *************************



		BASIC MZ-800
		============

     Tento BASIC je ve dvou verzích, pro Q-disk a pro CMT.
Zásoba povelů obou verzí BASICu je stejná. Ve verzi pro CMT jsou
chyby, které byly ve verzi pro Q-disk opraveny. Také kapacita
paměti u obou verzí je stejná.
     Jestliže máte možnost se dostat k verzi pro Q-disk, potom
vám radím používat tutu verzi přetočenou na kazetu.
     Proto již 100% nesouhlasí jednotlivé adresy programů.
Jedině prvních 8 KB je stejných. My se zde budeme zabývat hlavně
Q-disk verzí


		Další povely BASICu
 		===================

     V BASICu MZ-800 jsou k dispozici další povely, které nejsou
nikde uvedeny. Pro přehlednost jsou zde vyjmenovány a krátce 
vysvětleny.

BEEP     - písknutí  (440 Hz)
EDIT     - vypíše naposledy zpracovávané číslo řádky. Je také možno
           psát EDIT n .
FRAC     - vypíše desetinou část desetinného čísla
           A=FRAC (12.345)  =>  PRINT A  =>  .345
HEX$ (x) - převod dekadického čísla (x) na hexadecimální
MOD      - modulo dělení. Vypíše celočíselný zbytek při dělení.
           B=11 MOD 3  =>  PRINT B  =>  2
SPÁCE$   - vytvoří prázdný řetězec znaků.
LOAD ALL - tento příkaz provede nahrátí všech programů na Q-disku
           do RAM-disku. Tam se mohou snadno provést příkazy 
           RENAME nebo DELETE.
SAVE ALL - teto příkaz provádí nahrátí všech prograů z RAM na
           Q-disk.


		Úprava klávesnice - psací stroj
		===============================

     MZ-800 nemá na klávesnici žádné zvláštní klávesy pro
přehlásky a německé znaky. to bude nepříjemné především pro
ty uživatele, kteří často používají mikropočítač pro zpracování
textů a dat.
     Zvláštní znaky a přehlásky jsou uloženy ve znakovém generá-
toru a nechají se nadefinovat místo funkčních kláves F1 - F10.

     10 DEF KEY (1) = CHR$ (187): REM ü
     20 DEF KEY (2) = CHR$ (186): REM o
     20 DEF KEY (3) = CHR$ (173): REM u
     30 DEF KEY (4) = CHR$ (174): REM  
     40 DEF KEY (6) = CHR$ (185): REM A
     50 DEF KEY (7) = CHR$ (168): REM O
     60 DEF KEY (8) = CHR$ (178): REM U

     Tímto krátkým programem se nadefinují přehlásky na funkční
klávesy.


          Ukládání programu v BASICu do paměti (TOKEN)
          ============================================

     Program v BASICu se neukládá do paměti tak, jak je zobrazen
na obrazovce, nebo jak se vkládá, ale interpret BASICu má pro
každý příkaz číslo, kterému se říká kód. Podle tohoto kódu může
potom interpretr s pomocí tabulky zjistit, o jaký příkaz se 
jedná. Výhoda je jasná. Místo aby si např. pro příkaz  -RESTORE-
pamatovat 7 naků, stačí aby si pamatovat pouze dva znaky (kod),
čímž je malá spotřeba paměti.


		Příkazy BASICu MZ - 800
		=======================

     Vtéto části si zopakujeme všechny příkazy BASICu, jejich
zápis v kódu, přípustné skratky a začátek programů v paměti.
Koho by toto zajímalo, může si pomocí DISASSEMBLERu tyto programy
(tabulky) prohlédnout, nebo i pozměnit.
     Kódy se rozdělují do tří skupin. V jedné skupině jsou příka-
zy, které nepotřebují žádný před-byt. Ve zbývajících skupinách
jsou příkazy, které tento byt obsahují. Známe dva druhy 254 (FEh)
a 255 (FFh). Na druh příkazu to nemá vliv.
     Mezi příkazy se vyskytují kódy, které nejsou obsazeny. Tyto
jsou v naší tabulce označeny jako  "frei" (volné) a spůsobují
přímo skok do podprogramu, který vydává chybové hlášení "Syntax
Error. Tento program začíná u obou verzí BASICu na adrese 6364h.

    příkaz       zkratka         TOKEN     QD-BASIC    CMT-BASIC
    ------------------------------------------------------------
    GOTO         G.               128        69AF         69AF
    GOSUB        GOS.             129        692A         692A
    volný                         130        6364         6364
    RUN          R.               131        606E         606E
    RETURN       RE.              132        68F9         68F9
    RESTORE      RES.             133        6E9E         6E9E
    RESUME       RESU.            134        64B6         64B6
    LIST         L.               135        6A9D         6A9D
    volný                         136        6364         6364
    DELETE       D.               137        620C         620C
    RENUM        REN.             138        62AB         62AB
    AUTO         A.               139        60CA         60CA
    EDIT         E.               140        6125         6125
    FOR          F.               141        6602         6602
    NEXT         N.               142        6609         6609
    PRINT        P.               143        6C9F         6C9F
    volný                         144        6364         6364
    INPUT        I.               145        6DD4         6DD4
    volný                         146        6364         6364
    IF                            147        69C2         69C2
    DATA         DA.              148        67FE         67FE
    READ         REA.             149        6DCD         6DCD
    DIM          DI.              150        8DCC         8D55
    REM                           151        67FE         67FE
    END          EN.              152        60B9         60B9
    STOP         S.               153        6468         6468
    CONT         C.               154        6499         6499
    CLS          CL.              155        7972         78FB
    volný                         156        6364         6364
    ON.          O.               157        6952         6952
    LET          LE.              158        650D         650D
    NEW                           159        618E         618E
    POKE         PO.              160        68A1         68A1
    OFF          OF.              161        6364         6364
    PMODE        PM.              162        A015         9F9E
    PSKIP        PS.              163        A07A         A003
    PLOT         PL.              164        A428         A3B1
    PLINE        PLI.             165        A0BC         A045
    RLINE        RL.              166        A0BE         A048
    PMOVE        PMOV             167        A0C2         A04B
    RMOVE        RM.              168        A0C5         A04E
    TRON         T.               169        61CC         61CC
    TROFF        TROF.            170        61DF         61DF
    INP                           171        681F         681F
    DEFAULT      DEF.             172        6F41         6F41
    GET          GE.              173        686C         686C
    PCOLOR       PC.              174        A12A         A0B3
    PHOME        PH.              175        A15F         A0E8
    HSET         H.               176        A162         A0EB
    GPRINT       GP.              177        A16D         A0F6
    KEY          K.               178        6B84         6B84
    AXIS         AX.              179        A1D5         A15E
    LOAD         LO.              180        6FFD         6FFD
    SAVE         SA.              181        73C0         733F
    MERGE        M.               182        7068         7068
    CHAIN        CH.              183        7053         7053
    CONSOLE      CONS.            184        6A61         6A61
    SEARCH       SE.              185        6A9B         6A9B
    OUT          OU.              186        6B0A         6B0A
    PCIRCLE      PCI.             187        A215         A19E
    PTEST        PT.              188        A3F3         A36C
    PAGE         PA.              189        A3F1         A37A
    WAIT         W.               190        67EE         67EE
    SWAP         SW.              191        74A6         7425
    volný                         192        6364         6364
    EROR         ER.              193        63F8         63F8
    ELSE         EL.              194        69E4         69E4
    USR          U.               195        67A4         67A4
    BYE          B.               196        6A59         6A59
    volný                         197        6364         6364
    volný                         198        6364         6364
    DEF                           199        6C31         6C31
    volný                         200        6364         6364
    volný                         201        6364         6364
    LABEL        LA.              202        67FE         67FE
    volný                         203        6364         6364
    volný                         204        6364         6364
    volný                         205        6364         6364
    WOPEN        WO.              206        6F59         6F59
    CLOSE        CLO.             207        6F8A         6F8A
    ROPEN        RO.              208        6F56         6F56
    XOPEN        X.               209        6F5C         6F5C
    volný                         210        6364         6364
    volný                         211        6364         6364
    volný                         212        6364         6364
    DIR                           213        742A         73A4
    volný                         214        6364         6364
    volný                         215        6364         6364
    RENAME       REN.             216        744B         73CA
    KILL         KI.              217        6F8B         6F8B
    LOCK         LOC.             218        7418         7397
    UNLOCK       UN.              219        7416         7395
    INIT         INI.             220        6F47         6F47
    volný                         221        6364         6364
    volný                         222        6364         6364
    volný                         223        6363         6364
    volný                    254  128        6364         6364
    CSET         CS.         254  129        6364         6364
    CRESET       CR.         254  130        6364         6363
    CCOLOR       CC.         254  131        6364         6364
    volný                    254  132        6364         6364
    volný                    254  133        6364         6364
    volný                    254  134        6364         6364
    volný                    254  135        6364         6364
    volný                    254  136        6364         6364
    volný                    254  137        6364         6364
    SOUND        SO.         254  138        9BAC         9B35
    volný                    254  139        6364         6364
    NOISE        NO.         254  140        9BE3         9B6C
    BEEP         BE.         254  141        6A56         6A56
    volný                    254  142        6364         6364
    volný                    254  143        6364         6364
    COLOR        COL.        254  144        7675         760B
    volný                    254  145        6364         6364
    SET                      254  146        7592         752B
    RESET        RESE.       254  147        7593         7529
    LINE         LIN.        254  148        75A1         7537
    BLINE        BL.         254  149        75A2         7538
    PAL                      254  150        7619         75AF
    CIRCLE       CI.         254  151        774C         76DE
    BOX          BO.         254  152        764B         75DE
    PAINT        PAI.        254  153        76FD         768F
    POSITION     POS.        254  154        75F5         758B
    PATTERN      PAT.        254  155        75C4         755A
    HCOPY        HC.         254  156        7968         78F1
    volný                    254  157        6364         6364
    volný                    254  158        6364         6364
    volný                    254  159        6364         6364
    SYMBOL       SY.         254  160        790F         78A1
    volný                    254  161        6364         6364
    MUSIC        MU.         254  162        9BE6         9B6F
    TEMPO        TE.         254  163        9BD9         9B62
    CURSOR       CU.         254  164        683B         683B
    VERIFY       V.          254  165        73A9         7328
    CLR                      254  166        619B         619B
    LIMIT        LIM.        254  167        68B5         68B5
    volný                    254  168        6364         6364
    volný                    254  169        6364         6364
    volný                    254  170        6364         6364
    volný                    254  171        6364         6364
    volný                    254  172        6364         6364
    volný                    254  173        6364         6364
    BOOT         BOO.        254  174        6A95         6A95
    INT                      255  128        95C2         954B
    ABS          AB.         255  129        95BD         9546
    SIN          SI.         255  130        9709         9692
    COS                      255  131        96F9         9682
    TAN                      255  132        97E8         9771
    LN                       255  133        9A4F         99D8
    EXP          EX.         255  134        992B         98B4
    SQR          SQ.         255  135        961F         95A8
    RND          RN.         255  136        98E6         986F
    PEEK         PE.         255  137        98DA         9863
    ATN          AT.         255  138        963D         95C6
    SGN          SG.         255  139        98A0         9829
    LOG                      255  140        9A43         99CC
    FRAC         FR.         255  141        7BC0         7B49
    PAI                      255  142        98B8         9841
    RAD          RA.         255  143        98B3         983C
    volný                    255  144        6364         6364
    volný                    255  145        6364         6364
    volný                    255  146        6364         6364
    volný                    255  147        6364         6364
    volný                    255  148        6364         6364
    volný                    255  149        6364         6364
    volný                    255  150        6364         6364
    volný                    255  151        6364         6364
    volný                    255  152        6364         6364
    volný                    255  153        6364         6364
    volný                    255  154        6364         6364
    volný                    255  155        6364         6364
    STICK        STI.        255  156        9060         8FE9
    STRIG        STR.        255  157        907F         9008
    volný                    255  158        6364         6364
    volný                    255  159        6364         6364
    CHR$         CHR.        255  160        889F         88BA
    STR$                     255  161        8931         8879
    HEX$         HE.         255  162        88F0         88F0
    volný                    255  163        6364         6364
    volný                    255  164        6364         6364
    volný                    255  165        6364         6364
    volný                    255  166        6364         6364
    volný                    255  167        6364         6364
    SPACE$       SPA.        255  168        8913         889C
    volný                    255  169        6364         6364
    volný                    255  170        6364         6364
    ASC          AS.         255  171        8992         891B
    LEN                      255  172        899C         8925
    VAL          VA.         255  173        89A4         892D
    volný                    255  174        6364         6364
    volný                    255  175        6364         6364
    volný                    255  176        6364         6364
    volný                    255  177        6364         6364
    volný                    255  178        6364         6364
    ERN                      255  179        887A         8803
    ERL                      255  180        8888         8811
    SIZE                     255  181        8852         87DB
    CSRH         CSR         255  182        8864         87ED
    CSRV                     255  183        8869         87F2
    POSH                     255  184        886E         87F7
    POSV                     255  185        8874         87FD
    LEFT$        LEF.        255  186        89B6         893F
    RIGHT$       RI.         255  187        89D3         895C
    MID$         MI.         255  188        89F0         8979
    volný                    255  189        6364         6364
    volný                    255  190        6364         6364
    volný                    255  191        6364         6364
    volný                    255  192        6364         6364
    volný                    255  193        6364         6364
    volný                    255  194        6364         6364
    volný                    255  195        6364         6364
    TI$          TI.         255  196        8A46         89CF
    POINT        POI.        255  197        896C         88F5
    EOF          EO.         255  198        893F         88C8
    FN                       255  199        8FBF         8F48
    volný                    255  200        6364         6364
    volný                    255  201        6364         6364
    volný                    255  202        6364         6364
    volný                    255  203        6364         6364
    volný                    255  204        6364         6364
    volný                    255  205        6364         6364
    volný                    255  206        6364         6364


		Celkový přehled BASICu   MZ - 800
		=================================

     Na následujicích stránkách si popíšeme obě verze BASICu.

0000 - RAM - monitorová tabulka pro skok na 005A.

005B - Tabulka s počátečními sdresami CTRL programy (řídící
       programy) až po 009A. Následuje příslušný program.

00DA - Zde začíná BASIC.

017C - Tabulka s počátečnímy adresami různých programů až do 
       022A.

0247 - Hexadecimální hodnota v registru HL se ukládá v decimálním
       ASCII formátu do registru DE.

02F8 - Zde se zkoumá, zda byla stisknuta prázdná klávesa
       (mezerník). Jestli-že ano, čeká se až bude stisknuta jiná
       klávesa.

0305 - Bude-li stisknuta klávesa BREAK, program bude přerušen.

0314 - Zde jsou krátké programy pro vedení ukazatelů pro promě-
       nné a pro oblast řetězců.

0340 - Chybový text se zde převádí na srozumitelný text podle
       čísla chyby v akumulátoru.

03BE - Určuje způsob provozu obrazovky a zkoumá se připojení
       přídavné paměti VRAM.

0419 - Zde se nacházejí různé programy, které inicialisují pale-
       tové registry a určují oblast přetáčení obrazu.

04EF - Až po 05AC jsou programy,které přestavují obrazovku na 40
       nebo 80 znaků na řádek a mění ostatní programy odpovída-
       jícím způsobem.

05AD - Tento program vypíše znak v akumulátoru na obrazovku.

0652 - Podprogram smaže celou obrazovku (CLS).

06CC - Podprogram maže znak na pozici kursoru.

0848 - Posouvá oblast přetáčení o jeden řádek nahoru.

0992 - Tento podprogram přemístní kursor do levého horního rohu
       obrazovky (HOME)

099B - Podprogram způsobý posun řádky, jestliže kursor nestojí
       na začátku řádky.

09AB - Podprogram způsobý v každém případě posun o řádek.

0A19 - Nastavení klávesnice - ALPHA mód.

0A1B - Nastavení klavesnice - psaní malých písmen.

0A1E - Nastavení klávesnice - GRAPH módu.

0A24 - Posun kursoru na pozici dalšího tabulátoru.

0AB4 - Program vyzvedne řádku z klávesnice a uloží ji od adresy DE.

0B21 - Program vyzvedne znak z klávesnce. Kursor přitom bliká.
       Znak se při skoku zpět nachází v akumulátoru.

0BF6 - Testuje se klávesnice. Není-li stisknuta žádná klávesa,
       v akumulátoru je nula (00), v opačném případě hodnota
       příslušné klávesy v ASCII kódu.

0C7C - Testuje se stisknutí funkčních kláves. V HL je uloženo
       která klávesa byla stisknuta.

0D22 - Testuje se klávesnice. Při stisknutí SHIFT+BREAK se nasta-
       ví přepíneč na 0. Byl-li stisknut jen BREAK, čeká se tak
       dlouho dokud se opět nepustí.

0D47 - Zde začínají tabulky k přepočtu kódu kláves.

0D94 - Program vypisuje na obrazovku text, ktery je od adresy DE.
       Konečná značka textu musí být 0DH

0DC3 - Tabulka malých písmen ve video kódu

0E17 - Od této adresy jsou tiskové programy pro výpis na obra-
       zovku nebo tiskárnu. Tyto programy sahají až po 0ED8.

0ED9 - V této tabulce se převádějí řídící znaky pro tiskárnu.

0EF9 - K této adrese přijdou skoky z ROM monitoru zpět do BASICu.
       Program, který je k dispozici se nesmaže.

0F4E - Program testuje, zda VRAM paměť obsahuje 32 Kb. Jestli-že
       ano, pak se na adrese 1D99 zapíše 01H

12B2 - Od téty adresy leží text funkčních kláves.

13D2 - Tabulka, která přepočitává SHARP kód na ASCII a zpět.

15E0 - Tabulka udává povely monituru a jejich počáteční adresy.

            D      DUMP                16C6
            M      MEMORY CORECTION    1738
            P      PRINTER             15FE
            G      GOTO                16C1
            F      FIND                175C
            R      RETURN (BASIC)      1644
            S      SAVE                1607
            L      LOAD                161E
            V      VERIFY              163B
            T      TRANSFER            17AC

2000 - Od této adresy až do 27D0 je celý obsah obrazovky. Při 40
       znacích je potřeba jen polovina této paměti (23E7). Může
       být ale pouze čtena, například pro výpis na tiskárnu.
       Zápis do této oblasti nemá žádný vliv na obraz obrazovky.

Po těchto programech začíná vlastní BASIC, tj. všechny povely atd.
Protože BASIC je velmi rozsáhlý a podporuje různé podprogramy,
nebudeme se jím zde zabývat, protože k tomuto účelu je podrobnější
literatura.


		Rozšíření BASICu
		================

     V následující části vám chceme ukázat, jak můžete program
ménit. K tomuto účelu jsme napsali několik malých programů ve
strojovém jazyce, kteřé BASIC modifikují. Protože existují dvě
verze BASICu, (kazetová a Q-disk verze), napsali jsme je pro obě
dvě.
     Rozšíření nepotřebuje žádné přídavné místo v paměti, protože
se používají oblasti, které jsou volné v samotném BASICu.


        1. BORDER - barva okraje  (BOR.)
 	--------------------------------

     Pomocí tohoto povelu si můžeme nadefinovat barvu okraje
obrazovky. Za povelem  BOR. musí být konstanta, proměnná nebo
funkce. Konstanta barev nabývá hodnotu  0 - 15 , což odpovídá
tabulce v SHARP manuálu.

     pro kazet. verzi BASICu (dále jen,    pro CMT)

       	  POKE 23017, 66,79,210
	  POKE 21936, 205,218,132,123,1,207,6,237,121,201
	  POKE 23709, 176,85

     pro Q-disk verzi BASICu (dále jen,    pro Q-disk)

          POKE 23017, 66,79,210
	  POKE 21913, 205,81,133,123,1,207,6,237,121,201
	  POKE 23709, 153,85


	2. SEARCH, LIST - s prázdnou řádkou
	-----------------------------------

     Tento povel přidá za každou řádku jednu řádku prázdnou. To
usnadňuje především u delších programů lepší přehlednost.

     pro CMT

          POKE 21946, 58,131,107,205,6,0,201
  	  POKE 27424, 205,146,85

     pro Q-disk

	  POKE 21906, 58,131,107,205,6,0,201
	  POKE 27424, 205,146,85


     prázdná řádka se zapíná  -  POKE 21909, 205
                      vypíná  -  POKE 21909, 201


	3. Pípnutí při READY
	--------------------

     Podprogram vytvoří při každém zobrazení READY ještě krátké
pípnutí. Tím máte ještě akustickou kontrolu. To má smysl hlavně
při dlouých programových výpočtech, nebo při nahrávání.

     pro CMT

	  POKE 21953, 205,62,0,17,240,99,201
	  POKE 22650, 205,193,85

     pro Q-disk

	  POKE 21899, 205,62,0,17,240,99,201
	  POKE 22650, 205,139,85


	4. Zakázané zastavení pomocí BREAK
	----------------------------------

     Tento POKE zakáže použití příkazu BREAK. Program se nedá
zastavit.

     pro CMT + Q-disk

	  POKE 3368, 201          zastavení je zakázané
	  POKE 3368, 200          zastavení je povoleno


	5. Zakázané přerušení pomocí SHIFT / BREAK
	------------------------------------------

     Tento POKE zakáže přerušení programu pomocí SHIFT / BREAK.

     pro CMT + Q-disk

          POKE 22754, 62          přerušení je zakázané
	  POKE 22754, 202         přerušení je povoleno


	6. Změna kursoru v ALPHA módu
	-----------------------------

     Pomocí tohoto POKE se může změnit zobrazení kursoru v ALPHA
módu. Může být též zabudován do vlastních programů.

     pro CMT a Q-disk

	  POKE 5009, 255,255,255,255,255,255,255,255

     Toto je normální kursor. Chcete-li ho změnit musíte zadat
vždy vžech 8 bytů. Je tedy téměř neomezené množství změn kursorů.
Kursor se tvoří stejně jako PCG znak.

	  POKE 5009, 255,129,129,129,129,129,129,255

     Zde je návrh nového kursoru, vytvoří krabici.
	  Pozn.:   Za touto adresou následuje kursor v
		   SHIFT / ALPHA a GRAPH módu.


	7. Možnosti ochrany programů v BASICu
	-------------------------------------

     Tím že programy po nahrátí nejsou aoutomaticky spuštěny.
není v BASICu žádná moznost programy 100% chránit proti nedovole-
nému kopírování. Přesto existuje možnost programy po spuštění
pomocí RUN chránit. Některé z těchto možností vám zde chceme krát-
ce představit. Pomocí následujících POKE příkazů je BASIC 
modifikován takovým způsobem, že některé příkazy nemůže provádět.

     pro CMT

	ochrana proti SAVE	POKE 29503, 201
				POKE 29503, 205    původ. nastav.
	 	proti LIST	POKE 27293, 201
				POKE 27293, 62     původ. nastav.
		proti PEEK	POKE 39011, 201
				POKE 39011, 229    původ. nastav.
		proti BYE	POKE 27228, 201
				POKE 27228, 223    původ. nastav.

     pro Q-disk

	ochrana	proti SAVE	POKE 29632, 201
				POKE 29632, 205    původ. nastav.
		proti LIST	POKE 27293, 201
				POKE 27293, 62	   původ. nastav.
		proti PEEK	POKE 39130, 201
				POKE 39130, 229	   původ. nastav.
		proti BYE	POKE 27228, 201
				POKE 27228, 223	   původ. nastav.

	Pozn.:   Tato ochrana je nedostačující. Jednodoší je 
		 chránit program proti zastavení, blokováaním
		 BREAK při běhu aINPUT, ošetření chyb a úpravou
		 CTRL+RESET


	8. Odstranění otazníku při INPUT
	--------------------------------

     Především při obchodním použití bývá často otazník, který
se zobrazuje při příkazu INPUT X považován za rušivý.

     pro CMT a Q-disk

	  POKE 28213, 0,0
	  POKE 28213, 63,32       vymazání otazníku
	  POKE 28213, 32,58       bude psát dvojtečku

	  Pozn.:  Provedete-li INPUT "";X  otazník tištěn není.
		  Otazník se vytiskne pouze při neodeslání čísel.


	9. CONSOLE bez mazání obrazovky
	-------------------------------

     Jistě jste si všimli, že při provádění příkazu CONSOLE se
nejprve smaže obrazovka a pak se teprve provede CONSOLE
     Často by bylo vhodné, aby zbytek obrazovky zůstal zachován.
Je možné provádě CONSOLE i bez předchozího smazání obrazovky.
     Ale pozor, musí se opatrně aby nebyl obraz na obrazovce
zničen. (Teto postup není příliš korektní, může dělat samovolné
přesuny na obrazovce.)

     pro CMT a Q-disk

	  POKE 1257, 0,0,0        bez smazání obrazovky
	  POKE 1257, 205,82,6     obrazovka se smaže

     Prakticky není výhodné v případě, že byl obraz ji SCROLLován.


	10. Zrychlené SAVE a LOAD
	-------------------------

     Pomocí povelů POKE máte možnost zvýšit rychlost nahrávání
a přehrávání o výce než dvojnásobnou rychlost. Naše pokusy proká-
zaly, že se zvýšenou rychlostí nezhoršila spolehlivost záznamu
Také příkazy WOPEN a ROPEN jsou zrychleny.
     Samozřejmě je také možnost staré, pomalé nahrávky převzít
do nového formátu. K tomu potřebujete POKE aktivovat až po nahrá-
tí. Nové rychlé nahrávky nemohou být náhrány bez rozšířeného
BASICu a naopak.

     pro CMT a Q-disk

	Rychlé SAVE, LOAD       	Normální SAVE, LOAD
	-----------------		-------------------
	POKE 15249, 35			POKE 15249, 76
	POKE 15255, 11			POKE 15255, 24
	POKE 15259, 49			POKE 15259, 105


	11. Zlepšený příkaz TRON
	------------------------

     Jistě jste si jiš všimli, že povel tron je v BASICu 800
naprogramovan poněkud nedostatečně. A tak je například těžké
hledat chybu v programu, když je obrazovka stále popsána čísly
     My jsme povel TRON modifikovali tak, že je nyní možné zobra-
zovat číslo řádky stále v levém horním rohu. Vlastní stavba obra-
zovky tím zůstává zachována a je jednoduší program sledovat.
Stisknutímy BREAK můžeme být průběh programu ještě zpomalen.

     por CMT

	POKE 22400, 42,134,16,229,42,130,16,229,33
	POKE 22409, 0,0,34,130,16,33,0,128,34,134
	POKE 22421, 218,157,205,33,
	POKE 22425, 121,223,11,6,5,62,32,205,18,0,16,249,225,34
	POKE 22439, 130,16,225,34,134,16,195,6,98

Tento program je nový TRON program.

	spustí se	     		 POKE 25078, 195,128,87,
	starý TRON prog.(pro tisk)       POKE 25078, 62,91,223

     pro Q-disk

	POKE 22421, 81,158,205,152



		MZ - 700  BASIC    1Z-013B v1.0A
		================================

     Tato část knihy se zabývá interpretem BASICu MZ-700.
Speciálně půjde o kazetovou verzi BASICu, která se od Q-disk
verze BASICu liší hlavně tím, že adresy přesně neodpovídají.
     K mikropočítači MZ-800 patří dvě různé verze BASICu. jedna
z nich je MZ-700 BASIC, který sice ponechává více volného místa
v paměti, ale nepodporuje zváštní možnosti grafiky a generování
tónů. Proto se zvlášť hodí pro psaní programů, které tyto
zvláštnosti nepotřebují jako nabříklad práce s daty.
     MZ-700 BASIC se vždy hlásí bílou barvou na modrém pozadí a
tím se dá sndno rozeznat od MZ-800.
     BASIC se nahrává z kazety nebo disku a potom se sám spustí.
Nyní můžete vkládat vlastní programy, nebo je nahrát z kazety,
nebo disku.
     Některé příkazy v manuálu nejsou uvedeny, ale BASIC jim
přesto rozumí.

TRON	Tento příkaz vypisuje čísla řádků, které jsou interpretem
	právě zpracováván. Tento příkaz je užitečný zejména při
	hledáníchyb nebo tvoření programu.

TROFF	Vypíná příkaz TRON

POKE	O tomto příkazu je sice v manuálu zmínka, ale je zamlčeno,
	že může být použit také s několika parametry např.
		POKE 53248, 65,66,67	je stejné jako
			POKE 53248, 65
			POKE 53248, 66
			POKE 53248, 67

JOY	Tento příkaz kontroluje Joystick. V MZ-800 jsou ale
	definovány nové programy pro Joystick takže tento příkaz
	by mohl být bez účinku. (Blíže neznámá činost, parametry
	0 - 7 vrací log hodnotu)

CLS	Příkaz maže obrazovku a přesouvá kursor do levého horního
	rohu.

HEX$	Převádí dekadické číslo na hexadecimální,
	např.:  PRINT HEX$ (255)  dává  FF.


		Organizace řádků BASICu v paměti
		================================

     Programový řádek se do paměti neukladá tak, jak se objevuje
na obrazovce nebo jak se zadává, ale v kódech. Každému příkazu
se přiřadí hexadecimální kód (číslo), který je dlouhý jeden nebo
dva byty. To má tu výhodu, že každý příkaz potřebuje maximálně
jen dva byty, většina povelů se dokonce obejde s jedním bytem.
	Např.: Příkaz RESTORE má kód 85h místo 7 znaků.
     Program v MZ-700 BASICu začíná vždy od adresy 6BCFh.

Struktura programového řádku je násedující:

	1. První dva znaky určují počet znaků v program. řádku.
	   Může mýt maximálně 255 bytů. To vychází z podmínek,
	   že druhý byt (High byte) musí být vždy  00H.

	2. Třetí a čtvrtý byt tvoří číslo programové řádky BASICu.

	3. Náslsedující byty až po koncový byt 00H jsou kódy,
	   ASCII kódy, proměnné nebo řetězce.

	4. Koncový byt 00H. Ten ukazuje konec programové řádky.

	Je-li počet znaků 00, číslo řádky 00, je to konec celého
	programu v BASICu.


Příklad uložení programu v paměti:

	Abychom ješťe jednou zdůraznili velý postup ukládání
	řádků do paměti, vylistujeme si krátký program.

		10 REM BBG-DEMO
		20 FORA=1TO255
		25 PRINTCHR$(A);:NEXT
		30 PRINT"Info BASIC"
		40 GOTO10
		60 END

Vúpis paměti:

	adresa	obsah		význam
	--------------------------------------------------------
	6BCF	0F		počet Bytů v řádce (low Byte)
	6CD0	00		                   (high Byte)
	6CD1	0A		10 - číslo řádky (low Byte)
	6CD2	00			   	 (high Byte)
	6CD3	97		REM
	6CD4	20		SPACE (mezera)
	6CD5	42		B
	6CD6	42		B
	6CD7	47		G
	6CD8	2D		-
	6CD9	44		D
	6CDA	45		E
	6CDB	4D		M
	6CDC	4F		O
	6CDD	00		konec řádky
	6CDE	15		počet Bytů v řádce (low Byte)
	6CDF	00				   (high Byte)
	6CE0	14		20 - číslo řádky (liw Byte)
	6CE1	00			         (high Byte)
	6CE2	8D		FOR
	6CE3	41		A
	6CE4	F4		=
	6CE5	15		tento Byt znamená, že následuje
					velká konstanta
	6CE6	81		konstanta (ve vnitřním kódu)
	6CE7	00			skok na adresu 1581h
	6CE8	00			-/-
	6CE9	00			-/-
	6CEA	00			-/-
	6CEB	E0		TO
	6CEC	15		následuje velká konstanta
	6CED	88		konstanta (ve vnitřním kódu)
	6CEE	7F			skok na adresu 1500h
	6CEF	00			-/-
	6CF0	00			-/-
	6CF1	00			-/-
	6CF2	00		konec řádky
	6CF3	0E		počet Bytů v řádce (low Byte)
	6CF4	00				   (high Byte)
	6CF5	19		25 - číslo řádky (low Byte)
	6CF6	00				 (high Byte)
	6CF7	8F		PRINT
	6CF8	FF		1. Token CHR$
	6CF9	A0		2. Token CHR$
	6CFA	28		(
	6CFB	41		A
	6CFC	29		)
	6CFD	3B		;
	6CFE	3A		:
	6CFF	8E		NEXT
	6D00	00		konec řádky
	6D01	12		počet Bytů v řádce (low Byte)
	6D02	00				   (high Byte)
	6D03	1E		30 - číslo řádky (low Byte)
	6D04	00			         (high Byte)
	6D05	8F		PRINT
	6D06	22		"
	6D07	49		I
	6D08	B0		n
	6D09	AA		f
	6D0A	B7		o
	6D0B	20		SPACE (mezera)
	6D0C	42		B
	6D0D	A1		a
	6D0E	A4		s
	6D0F	A6		i
	6D10	9F		c
	6D11	22		"
	6D12	00		konec řádky
	6D13	09		počet Bytů v řádce (low Byte)
	6D14	00				   (high Byte)
	6D15	28		40 - číslo řádky (low Byte)
	6D16	00				 (high Byte)
	6D17	80		GOTO
	6D18	0C
	6D19	CF		1. Byt adresa skoku
	6D1A	6B		2. Byt adresa skoku (6BCF)
	6D1B	00		konec řádky
	6D1C	06		počet Bytů v řádce (low Byte)
	6D1D	00				   (high Byte)
	6D1E	3C		60 - číslo řádky (low Byte)
	6D1F	00				 (high Byte)
	6D20	98		END
	6D21	00		konec řádků v BASICu
	6D22	00		konec číslování řádků
	6D23	00		konec číslování


		Příkazy BASICu, adresy a kódy (TOKEN)
		=====================================

     Zde je ještě jednou vypsáno postavení všech povelů BASICu,
jejich kódů a odpovídajících adres programů. Některé příkazy jsou
sice obsaženy v tabulce kódů, ale vedeou k hlášení Syntax Error.
Příkazy jsou v seznamu odpovídajícím způsobem označeny. Tyto pří-
kazy jsou převážně pro disketu, a proto z důvodu šetřením místa
nejsou definovány pro kazetovou verzi BASICu, která je zde
probírána.

	příkaz		TOKEN	adresa	poznámka
	--------------------------------------------------------
	GOTO		80	3807
	GOSUB		81	36CD
	RUN		83	1C6E
	RETURN		84	3694
	RESTORE		85	25A8
	RESUME		86	36FB
	LIST		87	4102
	DELETE		89	3456
	RENUM		8A	3471
	AUTO		8B	21D5
	FOR		8D	1CBF
	NEXT		8E	1D6F
	PRINT		8F	1E6A
	INPUT		91	22CA
	IF		93	383F
	DATA		94	3323	viz REM
	READ		95	25E3
	DIM		96	5AEA
	REM		97	3323	viz DATA
	END		98	21B7
	STOP		99	2071
	CONT		9A	209F
	CLS		9B	38CE
	ON		9D	3792
	LET		9E	1959
	NEW		9F	2248
	POKE		A0	33D7
	OFF		A1	20FE	ERROR
	MODE		A2	4DD0
	SKIP		A3	4E2C
	PLOT		A4	3A31
	LINE		A5	4E8C
	RLINE		A6	4EFE
	MOVE		A7	4F05
	RMOVE		A8	4F14
	TRON		A9	227E
	TROFF		AA	2282
	INP		AB	3350
	GET		AD	3389
	PCOLOR		AE	4F1B
	PHOME		AF	4F50
	HSET		B0	4F64
	GPRINT		B1	4F76
	KEY		B2	4321
	AXIS		B3	4FFC
	LOAD		B4	41D1
	SAVE		B5	42A4
	MERGE		B6	41AB
	CONSOLE		B8	39CB
	OUT		BA	3339
	CIRCLE		BB	5050
	TEST		BC	5227
	PAGE		BD	523B
	ERASE		CD	20FE	ERROR
	ERROR		C1	2105
	USR		C3	3305
	BYE		C4	13C2
	DEF		C7	251B
	WOPEN		CE	46A3
	CLOSE		CF	4545
	ROPEN		D0	46DF
	KILL		D9	20FE	ERROR
	TO		E0		FOR program
	STEP		E1 		     -/-
	THEN		E2		IF program
	USING		E3		PRINT program
	TAB		E6	 	PRINT -/-
	SPC		E7		PRINT -/-
	OR		E8	20FE	ERROR
	AND		EC	20FE	ERROR
	> <		EE		MATEMAT. program
	< >		EF		      -/-
	= <		F0		      -/-
	< =		F1		      -/-
	= >		F2		      -/-
	> =		F3		      -/-
	=		F4		      -/-
	>		F5		      -/-
	<		F6		      -/-
	+		F7		      -/-
	-		F8		      -/-
	/		F8		      -/-
	*		FC		      -/-
	EXP(^)		FD		      -/-
	SET	     FE 81	3902
	RESET	     FE 82	3935
	COLOR	     FE 83	4473
	MUSIC	     FE A2	443C
	TEMPO	     FE A3	4463
	CURSOR	     FE A4	336C
	VERIFY	     FE	A5	42D1
	CLR	     FE	A6	224E
	LIMIT	     FE	A7	340B
	BOOT	     FE	AE	3A6A	skok na 0000H
	INT	     FE 80	6277
	ABS	     FF 81	6272
	SIN	     FF 82	63C6
	COS	     FF 83	63B0
	TAN	     FF 84	648D
	LN	     FF 85	6736
	EXP	     FF 86	6615
	SQR	     FF 87	62D0
	RND	     FF 88	65D0
	PEEK	     FF 89	65B5
	ATN	     FF 8A	62EE
	SGN	     FF 8B	657A
	LOG	     FF 8C	672A
	PIA	     FF 8E	65A2
	RAD	     FF	8F	659D
	EOF	     FF 95	20FE
	JOY	     FF 9E	39A3
	STR$	     FF A1	5677
	HEX$	     FF A2	55EC
	ASC	     FF AB	56A0
	LEN	     FF AC	56AC
	VAL	     FF AD	56B4
	ERN	     FF B3	5562
	ERL	     FF B4	556A
	SIZE	     FF B5	5548
	LEFT$	     FF BA	56C7
	RIGHT$	     FF BB	56E4
	MID$	     FF BC	5702
	TI$	     FF C4	573F
	FN	     FF C7	5CF7


		Manipulace s PEEK a POKE
		========================

     Tato část knihy se zabývá BASIC monitorem MZ-700, který leží
v oblasti 0000h až 0FFFh. Jsou zde udány specielní adresy, jejichž
změna může sloužit k vytváření efektů.
     Tato paměťová místa mohou být měněna pomocí POKE nebo USR.
Adresy v paměti jsou udány jednak v dekadickém, jednak v hexa-
decimální tvar

	hexa	dekad	význam
	--------------------------------------------------------

	0015	21	Zobrazení řetězce na obrazovce.
			USR(21,A$)  A$ - vypíše od pozice kursoru

	0030	48	Zahraje hudební řetězec

	003E	62	Vyvolá se pomocí USR. Vytvoří krátký tón.
			USR (62), USR ($003E)

	0044	68	USR (68)  zapíná frekvenci tónového
			generátoru, řiditelná přes 2717 a 2718

	0047	71	USR (71) vypíná tónový generátor

	004D	77	Plotter  zap/vyp. Když je oblast této
			paměťové buňeky  1 zapíná, 0 vypíná

	004E	78	CONSOLE zap/vyp. Když je obsah 1, jsou
			parametry zadány, když je 0 nejsou
	0054	84	Tato adresa obsahuje momentálí sloupec,
			ve kterém je kursor.

	0055	85	Tato adresa obsahuje momentální řádek, na
			které se nachází kursor.

	0056	86	Zde je první argument příkazu Console.

	0057	87	Zde je poslední řádek oblasti přetáčení
			obrazu pro příkaz Console.

	0059	89	Pomocí této adresy může být vytvořen
			autorepeat. Klávesa potom může zůstat
			stisknuta a nemusí se opětovně mačkat.
			To se dosáhne pomocí POKE 89,240. Původní
			nastavení POKE 89,83

	005B	91	Tato adresa obsahuje počáteční sloupec
			oblasti přetáčení obrazu.

	005C	92	Tato adresa obsahuje poslední sloupec
			oblasti přetáčení obrazu.

	005D	93	Zde jsou uschovány informace o barvách.
			POKE 93,39 by změnilo barvu popředí na
			černou a barvu pozadí na bílou. Jestliže
			se k 39 přičte ještě 128, pak následuje
			výpis ve 2. sadě znaků.
			např. POKE 93,39+128:PRINT"BBG BUCH"

	005F	95	Tato buňka obsahuje ASCII hodnotu napo-
			sledy stisknuté klávesy.

	0060	96	Tato adresa obsahuje znak kursoru v
			zobrazovacím kódu. Záklaní nastavení je
			239  POKE 96,73 by změnilo kursor na ? .

	0064	100	AM/PM  (dopol./odpol.) přepínání vnitřních
			hodin. Jestliže je TI$ méně než	12.00 hod.
			dopol., je tato buňka 0, jinak 1.
			POKE 100,1 by nastavilo TI$ z 164312 na
			044312.

	0124	292	Při POKE 292,1 se při každém stisknuti
			klávesy CR vytvoří krátký tón. POKE 292,4
			písknutí vypíná.

	0288	648	Vtéto buňce může být měněna rychlost,
			kterou se pohybuje kursor při trvalém
			testování klávesnice. Základní nastavení
			je 10. Větší než 10 je rychlejší, menší
			než 10 je pomalejší.

	04B3	1203	Jestiže se během provádění programu
			stiskne klávesa BREAK, provádění programu
			se na krátký čas přeruší. Tomu se může
			zamezit POKE 1203,201. Základní nastavení
			je POKE 1203,216.

	0655	1621	Přetáčení obrazu nahoru. USR(1621) má
			stejný efekt, jako stisknutí klávesy
			SHIFT+cursor nahoru.

	067D	1661	Přetáčení obrazu dolů. Stejně jako nahoru.

	07F9	2041	Tím se může měnit vzhled Alfa-módového
			kursoru. Změna se ale provede až po
			návratu z grafického módu.

	0A32	2610	Obsahuje hodnotu tempa pro muziku. Když
			je tempo 1, je zde 7, když je tempo 6,
			je zde 2 atd.

	0A39	2617	Byty 2617 a 2618 řídí tónový generátor.
			Generátor se zap. USR(68) a vyp. USR(71).

	0FFC	4092	Zde je kód (File code) souboru,
			naposledy nahraného programu.

	0FFD	4093	Zde začíná jméno naposledy nahraného
			programu. Délka může mýt maximálně
			16 znaků.
	1010	4112	Na této a následující adrese je zapsaná
			délka naposledy nahraného programu.


			RAM monitor
			===========

     Ještě jednou si zopakujem nejdůležitější standartní programy,
které jsou k dispozici v BASIC-monitoru a následně i v RAM
monitoru. Tento monitor je značně kompatibilní s MZ-700 ROM
monitorem. Tabulka skoků na začátku až po 0066h je s ROM-monitorem
identické.

	adresa	obsah	mnemonic	význam
	--------------------------------------------------------

	0000	C3DA00	JP 00DA		Začátek a do 1819h je 0
	0003	C32001	JP 0120		Vstup řádky - nepoužit
	0006	C3FE04	JP 04FE		Nová řádka 2
	0009	C3FA04	JP 04FA		Nová řád., když kursor není
					na nové řádce
	000C	C33105	JP 0531		Print Space
	000F	C30205	JP 0502		Print Tab 0,10,20,30,....
	0012	C33305	JP 0533		Print Chr. (ASCII)
	0015	C3DA04	JP 04DA		Print zprávy není použit
	0018	C3DA04	JP 04DA		Print zpráva siehe 0051h
	0018	C3F002	JP 02F0		Vstup klávesy není použit
	001E	C3A004	JP 04A0		BREAK
	0021	C33B0A	JP 0A3B		Zápis záhlaví
	0024	C33F0A	JP 0A3F		Zápis programu
	0027	C37A0A	JP 0A7A		Čtení záhlaví
	002A	C37E0A	JP 0A7E		Čtení programu
	002D	C3940A	JP 0A94		Kontrola
	0030	C3E408	JP 08E4		Melody  od 'DE' konec 0Dh
	0033	C35A0D	JP 0D5A		Nastavení času
	0036	0000	NOP NOP		žádný příkaz
	0038	C3E40D	JP 0DE4		program přerušení
	003B	C3E40D	JP 0DA7		čtení času, Akumulátor
					obsahuje 0=AM, 1=PM
					DE obsahuje sekundy.
	003E	C3130A	JP 0A13		Beep. Krátký tón
	0041	C3040A	JP 0A04		Tempo. Regostr A (1-7)
	0044	C3B709	JP 09B7		Začátek melodie
	0047	C3D209	JP 09D2		Konec melodie
	004A	C32001	JP 0120		Vstu řádky (0003)
	004D	00			Plot Flag 1=zap, 2=vyp
	004E	00			Console Flag 1=zap, 2=vyp
	004F	FF			Basicflag FF=Basic,
					64=Monitor
	0050	00			Použit při nahrávání CMT
	0051	C3DA04	JP 04DA		Tisk zprávy
	0054	00			Kursor sloupec
	0055	00			Kursor řádek
	0056	00			Console start. řádek
	0057	18			Console - počet řádek
	0058	C35303	JP 0253		Vstup klávesy, bez opak.
	005B	00			Console Start Spalte
	005C	27			Console ANzahl der Spalten
	005D	71			Barva obrazovky, 71=bílá-
					modrá
	005E	00
	005F	00			ASCII kód naposledy
					stisknuté klávesy
	0060	00			Zobrazovací kód kursoru
	0061	C36A0E	JP 0E6A		Program Joystick
	0064	00			AM/PM Flag. 0=AM, 1=PM
	0065	00			Pro Joystick
	0066	00			     -/-


     Dále sou uvedeny, adresy kde začínají jednotlivé standartní
programy, které jsou k dispozici v RAM-monitoru MZ-700. Jsou
udány vstupní adresy v hexadecimálním tvaru

		1443 	SAVE
		1469	LOAD
		14A9	VERIFY
		14B0	RETURN
		15BD	MEMORY SET
		1545	GOTO
		15F4	FIND
		154A	DUMP
		165A	TRANSPER


		Užitecné adresy v  S-BASICu.
		============================

     Následující seznam S-BASIC monitoru a BASICu podává přehled
o užitečných adresách a podpogramech a o struktuře a organizaci
BASICu. Všechny údaje o adresách jsou v hexadecimálním kódu.

	0067 	až po 00A6 jsou adresy CTRL (řídící). Ty určují
		adresy skoků po ?CHR$ (příkazu nebo CTR klávesy
		společně s jinou klávesou.

	00EA	Tento standertní program je vyvolán příkazem PEEK
		pro přístup na VIDEORAM

	00F2	Tento standartní příkaz je zapotřebí na VIDEORAM
		pomocí příkazu POKE.

	04A0	Příkaz testuje, zda byla stisknuta klávesa BREAK,
		nebo SHIFT+BREAK.

	04CD	Zde se převádí ASCII kód do zobrazovacího kódu
		(Display kód)

	0EFC	Tabulka pro přepočítávání z ASCII kódu do zobra-
		zovacího kódu.

	0FFC	Na této adrese je uložen kód souboru naposledy
		nahraného programu.

	0FFD	Od této adresy je jméno naposledy nalezeného
		programu.

	100E	Zde je délka naposledy nahraného programu. Na
		prvním místě je nižší slabika (low Byte) a potom
		vyšší (high Byte).

	1010	Na tomto místě je adresa autostartu. V BASICu je
		ale bez významu

	110F	Vyrovnávací paměť (Buffer). Zde je poslední řádka,
		která byla vložena klávesnicí.

	1132	Odtud jsou povely, kterými jsou obsazeny klávesy
		funkcí. Tabulka sahá až po 13C1H.

	1832	Sem skáče BASIC po nahrátí. Tento program také
		maže paměť až do konce. Na adrese 182EH je vyšší
		byt. Jestliže se sem vloží např. A0H, paměť se
		vymaže jen po A000H. Zde je také text hlášení
		po startu.

	1848	Sem skáčou všechny skoky z ROM-monitoru do BASICu.

	1869	Z této adresy vychází READY.

	1872	Od téty adresy leží standartní program pro vklá-
		dání měnění řádků programu BASICu.

	18FE	Zde začíná prováděcí program RUN.

	19B9	Odtud začíná startovací program, který převádí
		programy MZ-80 K  na MZ-700.

	20C7	Zde jsou ERROR tabulky a příslušná čísla.

	21A7	Tato adresa obsahuje právě aktuální čísla řádky
		programu v BASICu.

	2287	Od této adresy je standartní program TRON.

	242F	Až po adresu 245BH jsou nesmyslné věci.

	2AF5	Odtud až po 2CA8H je první tabulka klíčových
		slov.

	2CA9	Odtud až po 30A8H je nevyužita paměť. Sem se
		mohou zavést vlastní programy.

	30A9	Odtud je druhá tabulka klíčovích slov.

	3147	Zde jsou adresy jednotlivých klíčových slov. Jsou
		vyhledávány analogicky k tabulkám.

	38D5	Stack Pointer

	38D9	RUN přepínač	1=Stop	0=RUN

	38DD	TRON přepínač	1=TRON	0=TROFF

	38E6	Tato a následující adresa obsahuje aktuální
		číslo řádky.

	3D86	Odtud je standartní program přepočtu z binárních
		do dekadických hodnot v paměti.

	4795	Odtud je standartní program, který převádí řádky
		v BASICu na kódy. V tomto způsobu zápisu (kódech),
		je program též uložen v paměti.

	49CD	Působí právě opačně než standartní program na
		adrese 4795H.

	4B72	Zde jsou chybová hlášení ve srozumitelné řeči.
		Tabulka sahá až po 4D4FH.

	528B	Zde se zkoumá správnost matematických programů.

	6AB3	Konec programu v BASICu.

	6AB5	Ukazatel proměnných

	6AB7	Ukazatel zásobníku pro BASIC.

	6ABD	Konec paměti, která je k dispozici pro BASIC.

	6ABF	Začátek programu v BASICu.


		Paměť barev a druhá sada znaků.
		===============================

     Při zobrazování znaků a barev mějte vždy na paměti
následující! Paměť znaků leží v oblasti D000H - D3E7H. To
odpovídá přesně 1000 znakům a odpovídá to 25 řádkům po 40
znacích. Vtéto oblasti jsou uloženy pouze znaky.
     Příslušné informace o barvě leží přesně o 2048 Bytů výše.
Leží tedy v oblasti D800H - DBE7H.

	Pozn.:	BASIC MZ-700 používá celkem 50 řádků ve kterých
		lze editovat (SHIFT+nahoru,dolů nebo USR).

Příklad:	Jak může být vytvořen znak s barvou. Znak se
		objeví v levém horním rohu.


	10 POKE 53248, 83:REM Vytvoření znaku
	20 POKE 53248+2048, 64:REM Přebarvení ze zelené na černou

     Druhá sada znaků je aktivována vždy, když je v paměťi barev
více než 128 (80H). Proto musí být k barvě v našem příkladu
přičteno 128.

Příklad:	Přepnutí celého obsahu obrazovky na druhou sadu
		znaků a nastavení barvy na zelenou.


	FOR X=55296 TO 55295:POKE X,64+128:NEXT

     Ale také příkazy PRINT mohou být zobrazeny přímo ve 2. sadě
znaků. K tomu slouží místo v paměti 93 (5DH).

Příklad:
		POKE 93,PEEK(93)+128:?"700 Příklad"


		Převod programů z MZ-80 K K tomu slouží místo v paměti 93 (5DH).

Příklad:
		POKE 93,PEEK(93)+128:?"700 Příklad"


		Převod programů z MZ-80 K
		=========================

     S-BASIC má standartní program, který převádí programy z
MZ-80 K do MZ-700. Tento program umí překládat pouze kódy.
     Především příkazy POKE, PEEK a USR by měli být před zpoštěním
překontrolovány ještě jednou. Všechny POKE mezi 53248 až 54217
sahají do oblasti Videa a nemusí se měnit.

     Ostatní POKE většinou přímo ovlivňují BASIC a proto by měly
být používány opatrně. Následuje výpis POKE, které by měli být
změněny v každém případě. Adresy 4465 a 4466 řídí v MZ-80 K
kursor(4465 je sloupec, 4466 je řádka). To může být změněno tím,
že se oba argumenty napíší za příkaz CURSOR. 17828 je u MZ-80 K
adresa pro trvalé testování kláves. Nová adresa je nyní 89.

     Adresy 4513 a 4514 jsou u MZ-80 K určeny pro řízení tónového
generátoru. Tyto adresy jsou u MZ-800 (v módu MZ-700) 2617 a 2618.
POKE 4464, 1 přeřazuje u MZ-80 K klávesnici na malá písmena. Též
může být zadáno PRINT CHR$(5). Přeřazení zpět na velká písmena
bylo u MZ-80 K pomocí POKE 4464, 0. Tento příkaz může být
proveden pomocí PRINT CHR$(6).

     To jsou v podstatě všechny důležité POKE, které se musí
změnit. U všech ostatních POKE se musí postupovat s nejvyšší
opatrností, protože by mohlo dojít ke smazání BASICu i celého
programu. Pro jistotu by měly být všchny neznámé POKE nejprve
opatřeny REM, dokud Vám nebude jasný jejich význam.

     Adresy jako 10167,10680,10682 a 7125 můžete v každém případě
bez náhrady vymazat.


		Logické operace AND / OR
		========================

     V mnoha časopisech a výpisech programů se vyskytují příkazy
AND a OR. S-BASIC těmito příkazy ale nedisponuje. To by však
nemělo být problémem, protože tyto příkazy se dávají snadno
nahradit. (Pouze v podmíce, ne v logických operacích)

	znak " * "	se použije pro AND
	Znak " + "	se použije pro OR

Příklad:

	1) místo  IF A=1 AND B=2 THEN
			lze psát  IF (A=1) * (B=2) THEN

	2) místo  IF A= 1 OR B=2 THEN
			lze psát  IF (A=1) + (B=2) TFEN

     Je důležité sledovat, aby všechny takto použuté argumenty
byly v závorkách


	Vyloučení činosti klávesy BREAK a SHIFT+BREAK
	=============================================

     Zde bude uvedeno, jak se dá program zajistit proti přerušení
nebo zastavení klávesou SHIFT+BREAK.
     Stisknutí samotné klávesy BREAK nepřeruší běžící program, ale
na krátkou dobu ho zastavit.

	POKE 1203, 201		zastavení zakázané
	POKE 1203, 216		zastavení povoleno

     Při zabránění přerušení pomocí SHIFT+BREAK se musí změnit
více paměťových míst.

	POKE 6452, 54,25	přerušení zakázané
	POKE 6452, 113,32	přerušení povoleno

     Nyní může být program přerušen příkazem INPUT. Tomu
zabráníme pomocí těchto POKE

	POKE 8987, 29,35	přerušení zakázané
	POKE 9056, 98,35
	POKE 8987, 105,32	přerušení dovoleno
	POKE 9056, 105,32


		Zména barev bez vymázání obrazovky
		==================================

     Normálně v S-BASICu není žádná možnost přiřadit celé
obrazovce jinou barvu bez její vymazání. To právě může mýt velký
význam pro vytvoření několika efektů. Proto zde ukážeme možnost,
která to dovoluje.
     Může být změněna jak barva pozadí, tak barva popředí. To může
být programátorem v programu velice efektně využito.

		COLOR,,6,1:USR($072D)

     Tímto příkazem se provádí změna barvy. Je ale třeba dát
pozor, protože se kursor přesune do levého horního rohu


		Odvozené funkce
		===============

     MZ-700 BASIC má množství matematických funkcí, ale mnoho
funkcí nemá v sadě příkazů obsaženo. Tyto funkce mohou být velmi
užitečné především v matematických programech.
     Tyto funkce mohou být odvozeny z funkcí, které jsou k dispo-
zici a dají se též psát v MZ-800 BASICu. Proto zde uvádíme sestavu
dalších důležitých a uzitečných funkcí.

Secans		   SEC(X)=1/COS(X)
Cosecans	   CSC(X)=1/SIN(X)
Cotangens	   COT(X)=1/TAN(X)
Arcussinus	   ARCSIN(X)=ATN(X/SQR(-X*X+1))
Arcuscosinus	   ARCCOS(X)=ATN(X/SQR(-X*X+1))*PI/2
Arcussecans	   ARCSEK(X)=ATN(SQR(X*X-1))+(SGN(X)-1)*PI/2
Arcuscosecans	   ARCCSC(X)=ATN(1/SQR(X*X-1))+(SGN(X)-1)*PI/2
Arcuscotangens	   ARCCOT(X)=-ATN(X)*PI/2
Hyperbelsinus	   SINH(X)=(EXP(X)-EXP(-X))/2
Hyperbelcosinus	   COSH(X)=(EXP(X)+EXP(-X))/2
Hyperbeltangens	   TANH(X)=-EXP(-X)/(EXP(-X))*2+1
Hyperbelsecasns	   SECH(X)=2/(EXP(X)+EXP(-X))
Hyperbelcosecans   CSCH(X)=2/(EXP(X)-EXP(-X))
Hyperbelcotangens  COTH(X)=EXP(-X)/(EXP(X)-EXP(-X))*2+1
Areasinus	   ARSINH(X)=LN(X)+SQR(X*X+1))
Areacosinus	   ARCOSH(H)=LN(X+SQR(X*X-1))
Areatangens	   ARTANH(X)=LN((1+X)/(1-X))/2
Areasecans	   ARSECH(X)=LN((SQR(-X*X+1)+1)/X)
Areacosecans	   ARCSCH(X)=LN((SGN(X)*SQR(X*X+1)+1)/X)
Areacotangans	   ARCOTH(X)=LN((X+1)/(X-1))/2


		Pořízení bespečnostní kopie S-BASICu
		====================================

     Doporučuje se pořídit si bespečnostní kopii S-BASICu a tuto
také potom používat k denní potřebě, protože originální kazeta by
mohla být náhodou vymazána nebo přehrána. Dejte ale pozor na to,
že je dovoleno udělat pouze jednu kopii a tu jen pro osobní
použití

     Pro vytvoření této kopie postupujte takto:

	- zapnout počítač
	- stisknout klávesu M, tím se dostanete do monitoru
	- vložit J00AD a stisknout CR
	- 	 MC000 		   CR
	- 	 CD		   CR
	- 	 27 		   CR
	-	 00		   CR
	-	 CD		   CR
	-	 2A		   CR
	-	 00		   CR
	-	 C3		   CR
	-	 08		   CR
	-	 11		   CR
	- stisknout SHIFT+BREAK
	- vložit originál kazetu a přetočit na začátek
	- vložit JC000 a stisknout CR
	- stisknout PLAY na magnetofonu
	- program je nahraný po objevení "HIT ANY KEY"
	- vyndát originál kazetu
	- vložít prázdnou kazetu
	- stisnout libovolnou klávesu
	- stiknout klávesu RECORD PLAY na magnetofonu
	- čekat asi 7 minut
	- vyndat nahranou kazetu s kopii BASICu


		Rozšíření sady příkazů S-BASICu
		===============================

     Zde budou ukázána některá rozšíření pro kazetovou verzi
S-BASICu. Všechny následující rozšíření nepotřebují žádné další
místo v paměti, protože používají prázdnou paměť uvnitř BASICu
    Pro vložení standartních programů a rozšíření nejprve nahrajte
S-BASIC z kazety do počítače a potom vložte všechny řádky, před
kterými je uvedeno číslo řadky. Texty mezi řádky programu jsou
pouze pro vysvětlení a slouží jako komentář.

	1) READY s tónem

     Následující standartní program vytvoří při každém READY
krátký tón. Toto umožňuje, aby po LOAD nebo jiných dlouhých
procedurách byl jejich konec vnímán i akusticky.


	100 REM READY TON
	110 POKE 6256,129,48:POKE 12417,175,205,62,0,205,6,0,201


	2) Hudba při ERROR

     Při každé chybě se pomocí tohoto programu vytvoří krátký
hluboký tón. Tím se chyba neobjeví jen na obrazovce, ale je
provázen hlubokým tónem.

	120 REM Hudba při ERROR
	130 POKE 8561,137,48
	140 POKE 12425,205,81,0,229,17,149,48,205,48,0,225,201,
	    45,65,13


	3) Zastavení LIST pomocí SPACE

     Tento program umožňuje při listování programu listování
zastavit klávesou SPACE, aby jste mohli např. dělat poznámky
Při každém dalším stlačením SPACE se listuje řádeka po řádkce.
Při stisknutí libovolné jiné klávesy probíhá listování dále.

	150 REM Zastavení LIST
	160 POKE 16786,77,36,204,83,2,0:POKE 9293,205,27,0,
	    254,32,201


	4) Zlepšený příkaz TRON

     Při tomto zlepšení příkazu TRON se bude číslo právě
zpracovávané řádky zobrazeno v levém horním rohu obrazovky, místo
na aktuálním pozici kursoru. Toto zlepšuje přehlednost. Příkaz
TROFF ruší příkaz TRON.


	170 REM Nový TRON
	180 POKE 8841,42,230,56,205,167,33,33,0,208,6,5,26,
	    205,205,4
	190 POKE 8856,205,242,0,35,19,16,245,225,241,201


	5) Zobrazení ROPEN a WOPEN

     U přdcházejících modelů MZ-700 bylo při ROPEN nebo WOPEN
definována výzva pro PLAY nebo RECORD PLAY. V S-BASICu pracuje
tato výzva pouze v přímém způsobu a na v programu.

     Dá se to však snadno realizovat i v programu. K tomu slouží
následující program.

	200 REM PLAY/RECORD PLAY při ROPEN/WOPEN
	210 POKE 18442,205:POKE 18252,175

     S tímto rozšírením ale stále ještě není zobrazeno, zda byla
data nalezena a nahrána. Následující program vypíše jméno souboru
dat před jejich nahráním na obrazovku.

	220 REM ROPEN se zobrazením jména
	230 POKE 18167,205,153,48
	240 POKE 12441,17,11,67,33,252,15,205,200,22,58,252,15,201


	6) Speciální LIST

     Tato pozměnění standartního programu LIST způsobí, že po
každé řádce programu v BASICu je vynachaná řádka. To usnadňuje
přehled především u delších programů. Toto rozšíření platí pro
obrazovku i pro tiskárnu.

	250 REM Speciální LIST
	260 POKE 12410,205,249,23,205,249,23,201
	270 REM Zapnuto:POKE 16781,122,48
	280 REM Vypnuto:POKE 16781,249,23


	7) Ochrana programů

     Cránění programů proti LIST nebo SAVE může být provedeno,
jestliže byl program spuštěn pomocí RUN. Proto není možné program
100% chránit.

Přesto vám zde ukážeme,jak může být program chráněn proti různým
povelům.

	ochrana		  proti		původní stav
	----------------------------------------------
	POKE 16642,201	  LIST		POKE 16642,175
	POKE 17060,201	  SAVE		POKE 17060,205
	POKE 26037,201	  PEEK		POKE 26037,254
	POKE 5058,201	  BYE		POKE 5058,229



Výše uvedené řádky vložíme do počítače. Nyní máme basický program,
který by po odstartování způsobyl změny. Uživatel by si mě jenom 
zapamatovat adresy příkazů POKE, které jsou na řádcích 270 a 280,
aby mohl zapínat a vypínat speciální LIST. Toto rozšíření by se mě-
lo po vložení do počítače nahrát. Podle potřeby potom může být vždy
přehrána. Jestliže byl program jednou odsratován, může být smazán 
příkazem NEW. Změny zůstanou zachovány až do vypnutí počítače.



	       KURZ STROJOVÉHO JAZYKA.
      	       =======================

    Pro uživatele každého počítače je důležité a užitečné, když
se naučí systémový vnitřní jazyk. Ale není to tak jednoduché, aby
si mohl člověk jednoduše sednout a začít programovat.
    Nejprve srovnejme znaky BASICu a strojového jazyka. V BASICu
je obsluha velmi pohodlná, protože např. programy pro počítání
jako *,+,-,/ jsou již definovány. U komfortnějších BASICů, jako
je např. MZ-800 je přirozeně definováno mnohem více funkcí jako
např. SIN,COS,TAN,EXP atd. Naproti tomu si ve strojovém jazyce
musíme i obyčejné násobení dobře rozmyslet; opravdu těžké jsou
např. programy pro počítání v reálném čase. 
    Hledisko rychlosti je jeden z rozhoduj1icích argumentů pro 
programování v assembleru. A tak je někdy zcela nemožné napsat
některé programy v BASICu, protože rychlost je úplně nedostaču-
jící. Totéž platí pro potřebu místa v paměti, která je u BASICu
velmi velká. Proti tomu se ve strojovém jazyce stejný problém
vyřešit na jedné desetině místa,zvláště, když se BASIC nemusí na-
hrávat. Toto uspoří při pozdějším provádění programu mnoho času.
    Nyní ale začneme odhrnovat roušku tajemství strojového jazyka.


	1. Programovací medium.
	=======================

    Jako se v BASICu nedá programovat bez BASICu, nedá se progra-
movat ve strojovém jazyce bez strojového jazyka. Zde je několik
možností:

                   A. programování v assembleru

                   B. programování ve strojovém jazyce

                   C. programování v Monitoru

    Chceme zde jen ukázat rozdíly mezi assemblerem a strojovým
jazykem (zkráceně ML = machine language), ale dále se budeme za-
bývat programováním v ML (viz. též khiha: "ASSEMBLERPROGRAMMI-
ERUBG AUF DEM MZ-700/800").
    Proto vám doporučujeme, abyste si pro tento ML-kurs obstarali
dobrý strojový jazyk, který by měl v každém případě ovládat nás-
ledující povely:


                   a. Disassembler

                   b. zapsání hex. čísla do paměti

                   c. listování pamětí 

                   d. ukládání ASCII - řetězců do 
                      paměti (textwrite)

                   e. ASCII - listing

                       Toto vám umožní např. strojový jazyk 8002
                       od firmy BBG Software.


	2. Dvojkový systém.
	===================

    Pro znalce strojového jazyka mohou být následující kapitoly
příliš lehké a může je proto klidně přeskočit. Jestliže někomu 
není dvojkový neboli binární systém známý, měl by zde dávat dobrý
pozor, protože toto je klíč k porozumění ML. 
    Jak již jméno napovídá, jedná se zde o systém čísel, který má
něco společného s dvojkou (bi = řecky dvě). Jak možná víte, v e-
lektronice a tím i u počítačů existují jen dva stavy, a to 0 a 1
(vypnuto a zapnuto). Tento dvojkový sytém používá jen tyto dva 
stavy. Princip je podobný naší desítkové soustavě. Pro ty, kteří
náš desítkový systém ještě dostatečně neznají, máme jeden příklad.
    Vezměme si číslo 15326. Musíme zde jednotlivé číslice rozdě-
lit podle jednotek, desítek, stovek, tisícků atd. To znamená:

    15326  =  1 deset tisíc ...... 1x10

				       3
              5 tisíc ............ 5x10

				       2
              3 sta .............. 3x10

				       1
              2 desítky .......... 2x10

				       0
              6 jednotek ......... 6x10  (pro všechny nematema-
                                          tiky: deset na nultou
                                          je jedna!)

            4        3        2        1        0
15326 = 1x10  +  5x10  +  3x10  +  2x10  +  6x10

            n        n-1        n-2
číslo = Xx10  +  Yx10    +  Zx10    +  Ax10 + Bx1


    Právě tak se chová dvojkový systém. Desítkový systém má za
základ 10, dvojkový systém 2. U desítkového systému je největší
číslice 9, u dvojkového systému tomu odpovídající číslo 1. Jsou 
zde tedy pouze číslice 0 a 1. 

           n        n-1        n-2
dv.č. = Xx2   +  Yx2     +  Zx2     +  Ax2x1 + Bx1

    Jako příklad přepočítáme decimální číslo 39 na binární. Na to
musíme znát mocniny dvojky. Tak jako 10,100,1000,10000 atd. jsou
mocniny deseti, tak jsou 2,4,8,16,32,64,128 atd. mocniny dvojky.

	         x 
	číslo = 2 = mocnina 2

	          x
	číslo = 10 = mocnina 10

    Číslo 39 se skládá z mocnin 2, následujícím způsobem:

	39 = 32 + 4 + 2 + 1

	      5    2    1    0
	39 = 2  + 2  + 2  + 2
 	 	

    To se pokusíme zvládnout nejlépe pomocí následující tabulky:

-----------------------------------------------------------------
128	64	32	16	8	4	2	1

  0	 0	 1	 0	0	1	1	1   = 39
-----------------------------------------------------------------

    Decimální číslo 39 se v binární soustavě rovná číslu 00100111.
Jako jiný příklad decimální číslo 111. Sestavíme opět tabulku tak,
že zapíšeme pod příslušnou mocninu 2 jedničku nebo nulu, aby 
vzniklo správné číslo.

-----------------------------------------------------------------
128	64	32	16	8	4	2	1

  0	 1	 1	 0 	1 	1	1	1  = 111
-----------------------------------------------------------------

    Decimální číslo 111 je tedy v binární soustavě 01101111. 
Předkládáme vám ale ještě jednu dobrou metodu, jak určit, kdy
se musí pod mocninu 2 napsat 0 nebo 1.
    Ukážeme si to opět na čísle 111. Nejdříve hledáme mocninu 2,
která je nejbližší nižší k desítkovému číslu. 128 je větší než 
111, ale zároveň je číslo 111 větší než číslo 64. Napíšeme tedy 
pod 64 číslo 1, a potom 64 odečteme od 111 (111 - 64 = 47). Nyní
zacházíme s číslem 47 právě tak, jako s číslem 111, takže 32 by
bylo nejbližší nižší mocnina 2. Zapíšeme tedy pod 32 číslo 1 a 
odčítáme (47 - 32 = 15). Příští nejbližší nižší mocnina 2 je 8,
takže pod ní zapíšeme 1, odečtením dostaneme 7, což se dá z hlavy
zpočítat jako dvojkové číslo 111 (1 + 2 + 4 = 7). Tam, kam nebyla
zapsána žádná 1, je logicky zapsána 0. Tím dostaneme dvojkové čís-
lo 01101111. Čím větší je decimální číslo, tím větší musí být moc-
niny 2.
    Jestliže máme dvojkové číslo a chceme ho přepočítat na desít-
kové, sečteme jednoduše mocniny 2. To může sloužit jako kontrola
např. 01101111 = 64 + 32 + 8 + 4 + 2 + 1 = 111.


	3. Hexadecimální systém.
	========================

    Hexadecimální systém se může z počátku zdát pro začátečníka
zmatený, ale přesto je to velice logický systém a základ pro na-
učení strojového jazyka. Ptáte se proč se za základ pro počítač
nevzal desítkový nebo dvojkový systém. Odpověď je zřejmá. Desít-
kový systém není pro počítač zpracovatelný, a přepočítávaní de-
sítkového systému do dvojkového spotřebuje mnoho času. Přepočítá-
vání hexadecimálního systému do dvojkového je velice rychlé, pro-
tože 16 je přece mocina 2. Tím se ještě budeme zabývat. Jak již
jméno napovídá, je číslo 16 základ tohoto číselného systému. Obec-
ná přepočtová rovnice tedy tentokrát zní:

                 n        n-1        n-2
     číslo = Zx16  +  Yx16    +  Zx16    +  Ax16  

Mocniny 16 jsou:
	                     0   1   2   3 
	1, 16, 256, 4096 = 16 ,16 ,16 ,16

     Potrebujeme jen tyto mocniny, protože v paměti můžeme adre-
sovat jen po 63 535, takže vyšší mocninu nepotřebujeme.
     Pravděpodobně vás již napadlo, jak jak může být hexadecimál-
ní systém vybaven číslicemi, když od 10 do 15 žádné číslice nej-
sou. Zde bylo rozhodnuto vzít za základ písmena A - F, takže A=10,
B=11, C=12, D=13, E=15. Výpočet hexadecimálního čísla se provádí
podle stejného schématu jako při výpočtu dvojkového čísla. Jenom
se zde samozřejmě hledá nejbližší nižší mocnina 16. Podívejme se
na to na příkladu. Decimální číslo 83 má být přepočítáno na hexa-
decimální.

     Nejdříve tedy napíšeme tabulku:

	-----------------------------------------
	    4096      256      16      1

	      0        0        5      3  =  83
	-----------------------------------------

     Postupujme analogicky k dvojkovému systému. Nejprve hledáme 
nejbližší nižší mocninu 16, čili číslo 16. Toto je v 83 obsaženo
5 krát, napíšeme tedy pod 16 číslo 5, 5x16=80, dostaneme tedy zby-
tek 3. Dohromady to tedy dává hexadecimální číslo 83. Zkusme to
na větším decimálním čísle, třeba 15311. Nejlépe bude, vemete-li
si na pomoc kapesní kalkulačku. První mocnina je 4096. Toto číslo
je v 15311 obsaženo 3x, 3x4096=12288. Nyní dostaneme jeho zbytek
(15311-12288) 3023, který musíme porovnat s další menší mocninou
16. Do 3023 se 256 vejde 11x. Nyní musíme opět spočítat zbytek
(3023-(11x256)=207). 207 děleno 16 je 12 a zbytek je 15.

	-------------------------------------------------
	15311  =   3x4096  +  11x256  +  12x16  +  15

		       3           2          1         0
	15311  =   3x16    +  11x16   +  12x16  +  15x16
	-------------------------------------------------

     Nyní musíme čísla přeformovat na hexadecimální čísla. Jak 
jsme se již zmínili, představují čísla přes 9 samostatné hexade-
cimální cifry(A=10,B=11 atd.). Nyní musíme vypočtené hodnoty čili
3,11,12,15 přeformovat na hexadecimální číslo, což dává 3BCF.
Nejvyšší hexadecimální hodnota by byla FFFF. Od teď budou hexade-
cimální čísla na konci oznacena písmenem H. To nám také ulehčí
identifikaci, zda se jedná o čísla mající decimální nebo hexade-
cimální hodnotu. FFFFH je tedy 15x4096 + 15x256 + 15x16 + 15=65535.
Volné místo v paměti je 65535 bytů, což je 64 Kbytů.


	3.1. Přepočítání z dvojkové do hexadecimální soustavy.
	======================================================

     Při programování ve strojovém jazyce je později důležité 
převádět dvojkové hodnoty na hexadecimální a naopak. K tomu ně-
kolik dobrých rad: budeme se zde zabývat jen 8-bitovými hodnota-
mi, např. dvojkovou hodnotou 01111111. Potom se 8-bitové číslo
rozdělí na dvě poloviny, a to přesně uprostřed a vznikne 0111 a
1111. To jsou decimální čísla 7, resp. 15, což jsou hexadecimál-
ní hodnoty 7 a F. Hexadecimální číslo tedy je 7FH.


	4. Bit a byte.
	==============

     S těmito pojmy jsme se již setkali občas v předcházejících
kapitolách. Kdo ještě neví oč se jedná, tomu budiž řečeno nás-
ledující. Bit je nejmenší jednotka, kterou počítač zná. Byte se
skládá z 8 bitů. Bity si mohou pamatovat jen stavy 0 a 1, jeden 
byte má proti tomu 2 na osmou, tj. 256 možností zapamatování.
Byte je normálně udáván jako hexadecimální číslo. Celá paměť
MZ-800 má podletoho 8x65535 = 524280 bitů.


	5.Procesor Z-80.
	================

     Mikroprocesor Z-80 je srdcem MZ-800. Každý počítač má mikro-
procesor, ATARI, APPLE, COMMODORE mají především procesory 6502.
Jiné známé procesory jsou 6809 a nové 32-bitové procesory 68000,
80186 a mnoho dalších. Z-80 procesor má asi 400 oficiálních po-
velů a ještě mnohem více neznámých povelů, kterými se budeme za-
bývat později. Povely jsou 1,2,3,4 bytové.


	5.1. Registry.
	==============

     Registry jsou zvláštností procesoru. S registry se dá počí-
tat, vyjímat hodnoty z paměti a přenášet hodnoty do paměti. Mno-
ho logických operací, sčítání, odčítání a další se provádí pomo-
cí regustrů. Přitom existují jednobytové a dvoubytové registry. 
Dvoubytové neboli také 16 bitové registry jsou zvláště praktické
pro matematické operace. To je výhoda, kterou má procesor Z-80
proti procesoru 6502.


Sada registrů:

     8-bitové registry        16-bitové registry
     -----------------        ------------------

     A (akumulátor)           PC (programmcounter-čítač programů)
     B                        BC (skládá se dohromady 
     C                           z B a C)
     D                        DE (skládá se
     E                            z D a E)
     H                        HL (skládá se
     L                            z H a L)
     F (příznak přepínače)    SP (ukazatel zásobníku)
     LX                       IX (skládá se z
     HX                           registrů LX a HX)
     LY                       IY (skládá se z
     HY                           registrů LY a HY)
     Dvojitý registr        z  A,B,C,D,E,F,H,L  
     R - obnovovací registr
     I - přerušovací registr


5.1.1. Akumulátor (A-registr).
------------------------------

    Jak již bylo naznačeno, má akumulátor mezi registry zvláštní
postavení. Akumulátor je 8-bitový registr, ve kterém se provádí
logické operace jako AND,OR, ale též sčítání a odčítání. Jako 
jediný 8-bitový registr je schopen vyvolat hodnoty z paměti a do 
paměti je ukládat. Logické operace může provádět s pomocí ostatních 
registrů nebo s pamětí. To dělá z akumulátoru důležitou součástí
procesoru.


5.1.2. Další 8-bitové registry.
-------------------------------

    Kromě akumulátoru má Z-80 ještě další registry, jako B,C,D,E,
H,L. Obecně působí tyto registry jako akumulátor, ale jejich zá-
soba povelů není tak velká. A tak mohou pracovat jen ve spojení
s akumulátorem. Také není možné adresování paměti z těchto regis-
trů. 


5.1.3. Příznaky přepínače (flags).
----------------------------------

    Příznaky přepínače jsou představovány F-registrem, takže je 
dohromady 8 příznaků přepínače, z kterých je používáno pouze 6.


Zde je grafický přehled:

----------------------------------------------------------
 7	6	5	4	3	2	1	0 

 S      Z	-	H	-	P	N	C
----------------------------------------------------------

    Jména flagů:

         S - znaménkový flag          Z - nulový flag
         H - poloviční indikátor přenosu
         P - paritní flag
         N - odčítací flag
         C - indikátor přenosu

    Flagy se používají pro označení výsledku matematicko-aritme-
tické operace. Udává se, zda operace dává výsledek jako 0, nebo 
jestli existuje přeplnění atd.


5.1.3.1. Indikátor přenosu.

    Indikátor přenosu nám ukazuje přeplnění bitu 7 (u 16-bitových
přeplnění bitu 15). Indikátor přenosu si můžeme představit jako
aktivní devátý bit. Chceme provést operaci, při které vznikne 
přeplnění 8-bitů, takže při ní překročíme výpočetní oblast. Např.
A obsahuje 83H a B obsahuje 90H. Součet dává potom 113H, což by 
bylo ale 9-bitové číslo. V akumulátoru je potom 13H a v indiká-
toru přenosu 1. 


5.1.3.2. Odečítací flag.

    Tento příznak přepínče není programátorem požíván, používá se 
při speciálních desítkově-aritmetických povelech jako vnitřní
znaménkový bit. Pro programování je relativně nedůležitý.


5.1.3.3. Poloviční indikátor přenosu.

     Poloviční indikátor přenosu funguje podobně jako indikátor
přenosu, ale ukazuje se zde přenosu ze 3 bitů na 4. Pro programá-
tora zpracovávajícího program ve strojovém jazyce zde není žádná
možnost tento indikátor kontrolovat, a proto je praktický význam
minimální.


5.1.3.4. Paritní flag.

    Paritní flag má 2 hlavní funkce. 

a)   Určení rovnosti nějakého jevu. Rovnost znamená totéž jako
   křížový součet. To znamená, že se spočítají jednotky uvnitř
   jednoho bytu. Jestliže se suma jedotek nerovná, potom je v
   P-flagu jednotka (1), jinak je obnoven počáteční stav.

b)   Druhá hlavní funkce je funkce přeplnění. Udává se, zda při
   sčítání nebo odčítání nebyl omylem změněn znaménkový bit tím,
   že výsledek omylem přeběhl do znaménkového bitu.


5.1.3.5. Zero-flag.

    Jak jsme se již zmínili ve výše uvedeném příkladu, slouží
nulový flag k zobrazení toho, zda některá operace má výsledek 0
nebo ne. Při výsledku 0 má Z-flag nastaveno 1, jinak 0.


5.1.3.6. Znaménkový flag.

    Tento flag slouží k zobrazení znaménka, přičemž se osmice
bitů rozdělí na 7 datových bitů a jeden bit znaménkový. To má za 
následek to, že výpočetní oblast je od -127 do +128.


5.1.4. R - registr.
-------------------

     Obnovovací registr slouží interně k obnovení paměti. Přitom
počítadlo odpočítává z 7FH na 0, a potom je paměti vydán obnovo-
vací impuls. Z tohoto registru se dá prakticky jen číst, což se 
však báječně hodí pro generátor náhodných čísel. Tím, že se zame-  
zí impulsu obnovení (do akumulátoru se dá xx a do R se dá A) se
dá vymazat celá paměť a zůstane pouze destruktivní program.


5.1.5. I - registr.
-------------------

    Přerušovací registr ukazuje stav uvnitř úrovně operačního
systému, takže pro programátora nemá velký praktický význam.


5.1.6. PC - registr.
--------------------

    PC-registr, nebo též čítač programů, ukazuje, na kterém místě
právě pracuje základní jednotka Z-80. K čítači programů není možný 
žádný přímý přístup.


5.1.7. SP - registr.
--------------------

    SP-registr, nebo též ukazatel zásobníku, je registr, ve kte-
rém je 16-bitová adresa místa v paměti. Na tomto místě se nachází 
zásobník, což je pomocí ukazatele zásobníku definovaná pracovní
oblast, do které se ukládají, a ze které se vybírají data. Pro 
práci s tímto zásobníkem jsou speciální povely, kterými se budeme
zabývat později.


5.1.8. HL - registr.
--------------------

    HL-registr je 16-bitový registr, který se skládá ze dvou 8-
-bitových registrů H a L. Přitom nižší byt (Low Byte) tvoří L,
zatím co vyšší byt (High Byte) tvoří H.

    Pro osvěžení:
Low znamenalo nižší, High vyšší hodnotu. Zde začínáme mluvit o 
něčem, na co se v 16-bitovém zápisu musí dávat pozor. V paměti je
nejprve uložen Low, a potom High registr. Nechť tedy obsahuje
H-registr 06H, L-registr F4H. Potom bude registr HL obsahovat jako
clek O6F4H. Jestliže nyní uložíme obsah registru HL do paměti, bu-
de v paměti stát F406, čili přesně obráceně. HL-registr je tedy
16-bitový registr pro logické operace, a je to vedle A nejpouží-
vanější registr v sadě registrů.


5.1.9. BC a DE - registry.
--------------------------

    Tyto dva registry jsou velmi podobné registru HL. Oba se 
skládají z 8-bitových registrů B a C, resp. D a E, ale povelový
komfort je ve srovnání s HL velmi omezený. Musí se dát ale velký
pozor na to, že když se při programování použije registr B, změní
se i hodnota registru BC, takže se nejprve musí zachránit hodnota
registru BC. To je chyba, která se při programování ve strojovém 
jazyce často stává. To samozřejmě platí pro všechny 16-bitové re-
gistry, takže i pro HL,DF,IX,IY.


5.1.10. IX a IY registry.
-------------------------

     Registry IX a IY jsou velcí bratři registru HL. Zde se musí
dát pozor, protože zde bylo trochu nešťastně zvoleno pojmenování
registrů. Za prvé nemají registry IY a IX nic společného s re-
gistrem I. Část I  z IX registru je HX registr, část X je LX re-
gistr. Právě tak je to u IY registru, kde I je HY, část Y je LY
registr. Pozor ale na to, že LY,HY,HX,LX jsou 8-bitové registry, 
a ne jak se může na první pohled zdát 16-bitové registry. Progra-
mování těchto registrů není popsáno v žádné knize o Z-80, jsou to
neznámé povely, kterými se budeme zabývat později. IX a IY se též
nazývají indexové registry. Sada povelů indexových registrů je
velice podobná povelům pro HL registr, ale pro každý povel pro
indexový registr je potřeba minimálně tři, většinou dokonce čtyři
byty, což značně zvětšuje délku programu. O způsobu adresování 
budeme mluvit v jiné kapitole, protože je to opravdu těžká část
programování ve strojovém jazyce.


5.1.11. Zdvojené registry.
--------------------------

    Zvláštností v sadě registrů jsou tzv. zdvojené registry, A',
B',C',D',E',H',L',F'. Jsou to duplikáty registrů A,B,C,D,E,H,L,F,
které byly vyměněny s normálními registry pomocí povelů pro vymě-
ňování. Procesor dále počítá s hodnotami zdvojených registrů. 
Jestliže se povely vyměňování požijí dvakrát, logicky se vytvoří
původní stav.


	5.2. Mnemonic a Opcode.
	=======================

    Další důležitou kapitolou je sovislost mezi symbolem a význa-
mem povelů ve strojovém jzyce. Právě tak jako v BASICu má i zde 
každý povel konkrétní význam. Tak např. povel DIM v BASICu má 
význam zřízení pole. Ve strojovém jazyce má také každý povel svůj
hexa. kód, čili hexa. číslo označuje povel. Tak povel NOP 
(No OPeration) je označen číslem 00H. Takže když je zpracovávána
hodnota 00H, je interpretována jako NOP, a potom zpracovává ihned
další povel. Jestliže přijde jako povel 09H, budou sečteny re-
gistry HL a BC. Přehled všech těchto povelů Z-80 najdete v dodat-
ku této knihy. Mnemoniccode 09H znamená ADD HL,BC, čímž se dostá-
váme k mnemotechnickému zůsobu zápisu. Mnemoniccode povelu je pro 
programátora srozumitelná interpretace hexa. povelu. Tak je pro 
hexa. povel 09H definován mnemoniccode ADD HL,BL. Pro programá-
tora není možné rozpoznat smysl programu jen na základě čísel, 
naproti tomu mnemoniccode je pro něj snadno srozumitelný. V mne-
moniccode se dá programovat, ovšem pouze v assembleru. V assem-
bleru programujete např. INC A a assembler to převede na 3CH.  
Disassembler dělá pravý opak, takže převede 3CH na INC A. Pro nás
je disassembler plně dostačující, ale každý dobrý stroj. jazyk
by měl mít disassembler. Program se vloží v hexa. číslech a 
potom se může vylistovat pomocí disassembleru. Programování v 
assembleru je rozsáhlejší, ale má také více možností.


	5.3. Struktura paměti
	=====================

    Napsaný program je v paměti na určité adrese. Paměť začíná
na adrese 0000H a končí na FFFFH. Normální oblast programování 
MZ-800 začíná na 1200H. Odtud budeme též psát všechny naše prog-
ramy. Ke každé adrese v paměti patří také obsah, což může být da-
tový nebo programový byte. Abychom se mohli tímto zabývat, potře-
bujeme disassembler, který přeloží ze strojového jazyka do jazyka
symbolických instrukcí oblast od 1200H. Když se zapne počítač,
nejprve se většinou vymaže paměť. Je tomu tak i u MZ-800. Nyní 
tedy nalézáme v paměti pouze 00H a FFH. Když uvedený obsah přelo-
žíme, objeví se následující:

    ADRESA         OPCODE         MNEMONICCODE
    
     1200	     00	   	      NOP
     1201            00		      NOP
     1202            FF               RST 38
     1203            FF               RST 38


	5.4. Druhy adresování.
	======================

    V možnostech asdresování není Z-80 vybaven tak bohatě jako 
jeho protějšek - 6502. Přesto zde musíme říci několik věcí ne 
právě zanedbatelného významu. U Z-80 má mnemoiccode tři díly:

         a) druh povelu
         b) cílová adresa / registr
         c) strojová adresa / registr

    To znázorníme na příkladu:

Příklad:   LD A,B

    Toto je ukládací povel, při kterém bude hodnota, která je v
registru B uložena do registru A. V BASICu by tento povel zněl: 
A = B. Na tomto se dá vysvětlit struktura mnemonického kódu. Druh
povelu je ukládací povel (LD). Cílový registr je zde A-registr,
zdrojový registr je B-registr. To je registrové adresování. Zabý-
vejme se nyní povelem LD A,(HL), což je opět ukládací povel. Aku-
mulátor zde opět představuje cílový registr. Jen zdrojový registr
zde potřebuje další vysvětlení. Vidíme, že zdrojový výraz je zde
(HL). Závorka nám ukazuje, že zde pracujeme s pamětí. Výraz v zá-
vorce je HL-registr. HL je 16-bitový registr, který zde ukazuje 
na místo v paměti. Jestliže by HL měl hodnotu 0000H, pak by byla
zpracovávána hodnota, která je v paměti na místě 0000H (u MZ-800
je na adrese 0000H C3H). Tato hodnota je potom uložena do akumu-
látoru. A ještě další příklad:

           LD (1000H),A

    Jedná se opět o ukládací příkaz. Tentokrát nám závorka ukazu-
je, že cílová adresa je v paměti, zde tedy adresa 1000H. Hodnota,
která má být uložena za adresu 1000H, je tedy v akumulátoru 
(zdrojovém registru). 
    Rozdílné jsou 16-bitové ukládací povely. Vezměme příklad uve-
dený výše, ale tentokrát s HL-registrem.

           LD (1000H),HL

    Jak si můžete domyslet, bude hodnota v HL-registru uložena na
adrese 1000H. Nyní je ale tato hodnota 16-bitová, takže obsadí 
kromě adresy 1000H ještě adresu 1001H.
    Jak jsme se již zmínily, při 16-bitových znacích se v paměti 
ukládá nejprve nižší a potom vyšší byte. Nechť HL obsahuje před
provedením příkazu LD (1000H),HL hodnotu 12F5H. Po provedení je
na adrese 1000H hodnota F5H, na adrese 1001H hodnota 12. 

    Jako poslední bychom se chtěli zabývat dříve zmíněným indexo-
vým adresováním regisrů IX a IY. Jak již bylo řečeno, můžeme tyto 
registry považovat za velké bratry registru HL. Pro IX platí he-
xadecimální označení DDH, pro IY platí označení FDH. K hexa. kó-
du, který platí pro HL, se jednoduše přidá DDH nebo FDH. Jako 
příklad uvedeme povel INC HL:

          INC HL = 23
          INC IX = DD 23
          INC IY = FD 23

    To platí jen pro ty povely, u kterých nejsou žádné cílové a
zdrojové pohyby, protože tam musí být ještě hodnota indexu. Po 
Opcode se přidá ještě jeden byte. 

Zabývejme se např. povelem:

          LD A,(IX+05)

    Tento povel má velkou vnější podobu s již zmíněným příkladem
LD A,(HL), jen je tentokrát jiná hodnota výrazu v závorce; místo
HL je zde IX+05. Jestliže tedy IX obsahuje hodnotu 2000H, přičte 
se k ní 5 a dostaneme hodnotu 2005H. Potom bude vybrána hodnota
z adresy 2005Ha bude uložena do akumulátoru.


5.4.1. Výpočet indexového adresování.
-------------------------------------

    Rozhodující je výpočet indexové hodnoty za Opcode, protože
např. existuje povel LD A,(IX-03). Můžete se domyslet, že při 
indexovém adresování přicházejí v úvahu hodnoty v rozsahu od -128
do +127. Jako další příklad uvedeme povel:

          LD A,(IX+F0H)

    Při hexa. hodnotě F0 je nastaven sedmý bit. Tento sedmý bit
je znaménkový bit - to znamená, že to je záporné číslo. V tomto 
případě se jednoduše hodnota neguje (vytvoří se doplněk); doplněk
k FOH je 10H (F0H + 10H = 00H). Takže kdyby IX bylo 2000H, od 
2000H by se odečetlo 10H, což dává 1FF0H. Z této adresy by byl 
obsah uložen do akumulátoru.
 
Příklady:

    IX hodnota          Hodnota indexu          Vytvořená adresa

      3000H                   10H                       3010H
      3000H                   00H                       3000H
      3000H                   C0H                       2FC0H

    Ještě nezkušený programátor by měl nejprve znát všechny ho-
dnoty HL-registru, než začne s indexovým programováním.


	5.6. Dvojková aritmetika.
	=========================

    Dvojková logika je ve strojovém jazyce důležitá věc. Většinou
jde o logické operace s akumulátorem, se kterým se dají lépe
rozpoznat nebo maskovat určité stavu bitu. 

    Povely logických operací jsou:

a) AND
b) OR
c) XOR

    Nejprve něco o základu logických operací. Provádí se vždy lo-
gické operace se dvěma bity podle logického schématu. Cílový bit 
bude obsahovat novou hodnotu, přičemž se postupuje podle tabulek.

   Například tabulka příkazu OR

	      bit A   bit B	  výsledný bit
	      -------------------------------
		0	0		0
		1	0		1
		0	1		1
		1	1		1


Na vysvětlenou:  Když má bit A  hodnotu 1 a bit B  hodnotu 0,
---------------  bude mít výsledný bit logické operace hodnotu 1.
Když bude mít bit A, nebo B hodnotu 1, bude výsledný také 1. Ve
strojovém jazyce se provádějí logické operace vždy v akumulátoru
s jedním s registrů. Například logická operace OR A,B, nebo lépe
uspořádáno OR(AaB). Výsledek log. operace je také v akumulátoru.
Proveďme operaci OR v akumulátoru a C registru. A obsahuje 45H a
C obsahuje 09H. Nyní napište tyto hodnoty ve dvojkovém kódu.

	registr A	01000101	45H
		C	00001001	09H
			-------------------
	výsledek	01001101	4DH

Porovnávali jsme pod sebou napsané bity podle tabulky OR, a jeko
výsledek jsme dostali 4DH.

Nyní tabulka pro příkaz AND

	      bit A   bit B	  výsledný bit
	      --------------------------------
		0	0		0
		0	1		0
		1	0		0
		1	1		1

Vezměte nahoře uvedená data a porovnejte podle tabulky AND.

	registr A	01000101	45H 		C	00001001	09H
			-------------------
	výsledek	00000001	01H

Po provedení AND A,B je tedy v akumulátoru hodnota 01H. Při log.
operaci AND bude výsledek 1, pouze tehdy, když oba původní bity
obsahují 1.

Nakonec ještě tabulka pro příkaz XOR.

	      bit A   bit B	  výsledný bit
	      --------------------------------
		0	0		0
		0	1		1
		1	0		1
		1	1		0

Znovu porovnáváme uvedená data pomocí tabulky XOR

	registr A	01000101	45H
		C	00001001	09H
			-------------------
	výsedek		01001100	4CH

Poprovedení příkazu XOR A,B obsahuje akumulátor hodnotu 4CH.
Příkaz XOR dá interpretovat také takto. Výsledný bit obsahuje
1 pouze tehdy, když bity A,B jsou rozdílné.


	5.7.	Logické a početní operace
	=================================

     V sadě příkazů je několik příkazů, které programátorovi
při těchto operacích pomáhají


5.7.1.	Příkaz ADD
------------------

     Příkaz ADD je jednoduchý sčítací příkaz, který sčítá dva
registry. Například  ADD HL,BC. Když HL obsahuje 3245H a BC A753H,
pak po provedení příkazu obsahuje HL registr hodnotu D998H. 


5.7.2.	Příkaz ADC
------------------

     Příkaz ADC pracuje stejně jako ADD, ale při sčítání je přičten
i indikátor přenosu. Kdyby byl indikátor nastaven a provedli
buchom příkaz ADC HL,BC s hodnotami dříve uvedenymi, v registru HL
by byl výsledek D999H.


5.7.3.	Příkaz SUB
------------------

     Příkaz SUB vzájemně odečítá dva 8-bitové registry. Například
příkaz SUB A,B odečítá registr B od akumulátoru.


5.7.4.	Příkaz SBC
------------------

     Příkaz SBC pracuje stejně jako příkaz SUB, ale při nastavení
indikátoru přenosu je odečten i indikátor přenosu. SBC příkaz
platí na rozdíl od příkazu SUB i pro 16-bitové registry.


5.7.5.	Příkaz INC
------------------

     Příkaz INC jednoduše načítá registr, to znamená, že je jeho
hodnota o jedenotku zvýšena. Když HL obsahuje 3323H, po prove-
dení příkazu INC HL bude obsahovat hodnotu 3324H. Podobně jako
v BASICu X=X+1.


5.7.6.	Příkaz DEC
------------------

     Příkaz DEC jednoduše odčítává registr, to znamená, že jeho
hodnota je o jednotku snížena. Když HL obsahuje 3323H, po prove-
dení příkazu DEC HL bude obsahovat hodnotu 3322H. Podobně jako
v BASICu X=X-1.


5.7.7.	Příkaz CP
-----------------

     Příkaz CP umožňuje srovnávat registr nebo obsah paměti s
akumulátorem. Sronává se, zda hodnota v akumulátoru je větší,
menší nebo stejná. Například registry A i B obsahují  hodnotu
99H. Po provedení příkazu CP A,B se v registrech hodnoty nemění,
ale nastaven Zero-flag, protože hodnoty se sobě rovnají.



	5.8.	Práce s jednotlivými bity
	=================================

     V sadě příkazů jsou příkzy, které umožňují zjišťování hodnot,
nastavení nebo obnovení počátečních hodnot jednotlivých bitů.


5.8.1.	Příkaz SET
------------------

     Příkaz umožňuje nastavení jednotlivých bitů v registrech.
Například SET 7,A nastavuje nejvyšší bit v akumulátoru na 1.
Může se manipulovat i s hodnotou v paměti pomocí indexového
adresování.


5.8.2.	Příkaz RES
------------------

     Příkaz RES umožňuje nastavení počáteční hodnoty jednitlivých
bitů v registrech. Například RES 5,B nastavuje pátý bit regisru B
na 0. Jestliže B obsahoval předtím 23H (00100011), obsahuje po
provedení příkazu hodnotu 03H (00000011)


5.8.3.	Příkaz BIT
------------------

     Příkaz BIT umožňuje zjišťování hodnot jednotlivých bitů v
registrech. Například BIT 0,A zde se zjišťuje obsah nultého bitu
akumulátoru. Tato částst hodnoty je potom v Z-flagu. Jestliže
nultý bit akumulátoru obsahoval 1, pak v Z-flagu je 0.


5.8.4.	Příkazy rotací
----------------------

     Příkazy rotací jsou příkazy, pomocí kterých můžeme bity
v registrech rolovat, to znamená, že při levotočivé rotaci se
6-tý bit přesune na místo 7-mého bitu, 5-tý bit na místo 6-tého
bitu atd. až se přesune 7-mý bit na místo 0-tého bitu. Při
pravotočivé rotaci se budou bity posouvat obráceně. Příkazy 
rotace se liší jen nepatrně. Co bude pro programátory Z-80
jistě nové, je příkaz SLS (CB30 až CB37 jako Opcode). Většinou
se obejdeme s příkazy RRCA a RLCA. Zde se ještě zmíníme o použití
při násobení. Vezměme si např. číslo 52, napišme ho v binarním
kódu  00110100. Když provrdeme RRCA, bude po rotaci v akumulátoru
01101000, což je číslo 104. Provedlo se násobení dvěma. Jestliže
byl nastaven 7 bit, výsledek není spravný! Přeplnění je v flagu
CY. Pávě tak otáčení doprava znamená dělení. Proto jsou tyto
příkazy zvláště při matematických programech nepostradatelné.


5.8.5.	Blokové příkazy
-----------------------

     Mikroprocesor Z-80 má tu zvláštnost, že může použít příkazy
pro operace s bloky. Tyto příkazy se dělí do dvou skupin.

	a) příkazy pro hledání bloků
	b) příkazy pro přesuny bloků


5.8.5.1. Příkazy pro hledání bloků

     Hledání bloků zde bude vysvětleno na příkazu CPIR. Přitom se
znak, který je v akumulátoru, hledá v určité oblasti. Adresa
začátku je v HL, délka bloku, ve kterém se má hledat je v BC a
znak, který se bude hledat je v akumulátoru. Například budeme
hledat znak 66H v oblasti od 3000H do 4000H. Jestliže je znak
nalezen, bude práce na tomto místě v páměti přerušena a Z-flag
je nastaven. Jestliže znak není nalezen, je Z-flag nastaven na
původní hodnotu.

	1200	3E 66		LD   A,66H
	1202	21 00 30	LD   HL,3000H
	1205	01 00 10	LD   BC,1000H
	1208	ED B1		CPIR
	120A	CA XX XX	JP   Z,XXXXH
	120D	pokračování


5.8.5.2. Příkazy přesunu bloků

     Funkce přesunu bloků bude vysvětlena na příkazu LDIR. Přitom
bude blok v paměti přesunut do jiné části paměti. Budeme přesouvat
oblast od 2000H do 3000H za C000H. Pro příkaz LDIR jsou treba tři
parametry:

	a) počáteční adresa původního bloku	HL - registr
	b) počáteční adresa přesunu		DE - registr
	c) délka bloku				BC - registr

     Jsou-li nastaveny všechny parametry, můžeme použít příkaz
LDIR. Pro zhora uvedená data by se musel napsat následující
program:

	1200	21 00 20	LD   HL,2000H	odkud
	1203	11 00 C0	LD   DE,C000H	kam
	1206	01 00 10	LD   BC,1000H	délka
	1209	ED B0		LDIR
	120B	C3 AD 00	JP   00ADH	skok do monitoru


5.8.6.	Příkazy skoků
---------------------

     Zásadně jsou dva druhy skoků, podmíněné a nepodmíněné.

Nepodmíněné skoky "skáčí" vždy na definovanou adresu, podmíněné
skoky "skáčí" na adresu pouze tehdy, je-li splněna podmínka, např.
když je Z-flag 1.


5.8.6.1. Absolutní příkazy skoků

     Absolutní příkazy skoků jsou jednoduché příkazy, například
JP 3000H skočí vždy na adresu 3000H v paměti, nebo například
JP NZ,3000H skáčí na adresu 3000H, když výsledek operace není
nolový,bude v Z-flagu 0. N v podmínce znamená vždy NE !!
Například: NC = not Carry


5.8.6.2. Relativní příkazy skoků

     Relativní příkazy skoků jsou o něco komplikovanější než
absolutní. Jsou také podmíněné a nepodmíněné, ale způsob
adresování je jiný. Podobá se indexovému adresování, popsanému
v kapitole 5.4.1.. Jak si vspomínáme, rozsah hodnot byl od -128
do 127, čili 7-mi bitové zobrazení. Právě tak je to u relativního
skoku. Nejprve následuje normální byt pro druh příkazu, potom
hodnota indexu, například

	1200	38 06		JR C,PC+2+06	;PC - obsah čítače
							instrukcí

V tomto případě bude pokračovat zpracování programu o 6 bytů dále,
je-li nastaven indikátor přenosu. Výhoda relativních skoků je
možnost přesunutí do libovolné oblasti paměti. Naproti tomu je
nevýhodou malý rozsah adresování pouze 256 bytů, což hovoří pro
apsolutní adresování. Zvláštní formou je skok závislý na registru
například JP (HL).
     To znamená, že ve zpracování programu se bude pokračovat na
tom místě v paměti, které odpovídá hodnotě registru HL. Jestliže
HL obsahuje například hodnotu 2000H, stačí na adresu 2000H. To
platí i pro registry IX a IY.


5.8.7.	Příkazy CALL
--------------------

     Příkaz CALL je obdobou příkazu GOSUB v BASICu. Je jím vyvolán
podprogram, který je zakončen příkazem RETURN. Přitom existují
právě tak jako u skoků podmíněných a nepodmíněných příkazy CALL,
jako například  CALL Z,3000H. Zde je vyvolán podprogram na
adrese 3000H. když je nastaven Z-flag.
     K příkazu CALL patří také příkaz RET, který může být též
podmíněný nebo nepodmíněný. Například RET C skáče zpět, když je
nastaven indikátor přenosu.


5.8.8.	Příkaz DJNZ
-------------------

     Speciální příkaz skoku je příkaz DJNZ, který provádí funkci
příkazu cyklu. Přitom registr B používá jako počítač smyček.
Příkaz DJNZ je spojen s relativní adresou skoku a s odpočítáváním
B registru. To může znít velmi složité, ale složité to není.

	1200	06 06		LD   B,06H
	1202	CD 3E 00	CALL 003EH	nechá zaznít tón
	1205	10 FB		DJNZ 1202H
	1207	C3 AD 00	JP   00ADH	skok do monitoru

     Když se tento program odstartuje z monitoru pomocí J 1200,
zazní 6x tón, protože jsem na začátku uložili do registru B
hodnotu 6H, potom jsme standartním programem 003EH zavolali
standartní tónový program. Nyní čítač programu narazil na příkaz
DJNZ, přičemž od B registru odečte jednotku. B registr obsahuje
nyní 5H. Protože tento registr neobsahuje 0, řízení programu
skočí na 1202 a znovu se vyvolá tón. Po šesti kolech je B registr
0, takžese již neskáče na adresu 1202, ale pokračuje dále v
programu. Pomocí tohoto příkazu se vytvoří smyčka. Program v
BASICu by zněl takto: 	FOR T=1 TO 6:USR ($003E):NEXT


5.8.9.	Příkazy IN a OUT
------------------------

     Tyto příkazy vysílají a přijímají data přes porty. Tím je
umožněno provozování externích zařízení jako floppy, tiskárny
apod. Vhodným programováním se dají napříkad řídit signály
modelů vlaků a mnoho jiných. U MZ-800 mají příkazy OUT a IN často
za úlohu provádět řízení přídavné paměti, čili aktivovat nebo
deaktivovat oblasti paměti.


	6. Kapitola programování
	========================



	6.1.	Doporučení
	==================

     Následující příkaz programů jsou napsány tak, že mohou být
spuštěny pomocí monitoru MZ-800. Ale pro porozumění je potřeba
Disassembler, protože pouze z hexadecimálních čísel se dá těžko
vyčíst smysl. Napsané programy se dají spustit z monitoru příkazem
J 1200 a vkládat příkazem M. Na to se musí zadat i hexadecimální
kód. Po provedení programu se řízení předá zpět do monitoru.
Pomocí Disassembleru se dá snadno rozluštit obsah programu.


	6.2.	Jak tisknout ve strojovém jazyce
	========================================

6.2.1.	Vytisknutí textu na displej
----------------------------------

     Při tisknutí ve strojovém jazyce je nejpříjemnější, dá-li se
použít standartní program monitoru. To se musí text, který
chceme vytisknout, napsat na určitou adresu v paměti. Pomocí
příkazu M napíšeme na adresu 2000H náš text, například  BBG

	M 2000 (CR)
	42 (CR)		B	v ASCII kódu
	42 (CR)		B
	47 (CR)		G
	0D (CR)			konec textu

     Jak vydíte, musí být text, který chceme vytisknout, okončen
ODH. Nyní ještě program, který tento text vytiskne:

	1200	11 00 20	LD   DE,2000H	adresa, textu
	1203	CD 15 00	CALL 0015H	vyvolání tisku
	1206	C3 AD 00	JP   00ADH	skok do monitoru

Takže se nejprve do DE registru nahraje adresa 2000H, na které je
text, který chceme vytisknout. Když zavoláme podprogram 0015H,
objeví se text na obrazovce. Po provedení J1200 se tedy objevy
text BBG na obrazovce.


6.2.2.	Vytištění jednoho znaku
-------------------------------

     V popsaném příkladě jsme tiskli na obrazovku libovolně dlouhý
text. Nyní chceme na obrazovku vytisknout je jeden znak. Přirozeně
pro to můžeme použít výše uvedený program, ale je jednodušší
možnost, použit standartní program monitoru 0012H (viz. též
standartní programy monitoru). Znak, který má být vytištěn musí být
v akumulátoru, než je tiskový příkaz zavolán. Například:
chceme-li vytisknou 0. Na to musíme znát hodnotu v ASCII kódu a
tu uložit do akumulátoru (ASCII kód 0 je 30H).

	1200	3E 30		LD   A,30H	vložení 0 (30H)
	1202	CD 12 00	CALL 0012H	tisk
	1205	C3 AD 00	JP   00ADH	skok do monitoru


	6.3.	Čtení klávesnice
	========================

6.3.1.	GET ve strojovém jazyce
-------------------------------

     Rovněž velmi důležitou součástí programu je testování
klávesnice. V monitoru je již testování klávesnice definováno
(program monitoru 001BH). Tento program je volán stisknutím
klávesy, její hodnota je uložena v akumulátoru. Nebyla-li
stisknuta žádná klávesa, je v akumulátoru 00H. Tento program
zároveň vytiskne znak stisknuté klávesy na obrazovku.

	1200	CD 1B 00	CALL 001BH	GET program
	1203	28 FB		JR   Z,1200H	není stisknuta
	1205	CD 12 00	CALL 0012H	tisk stisk.klávesy
	1208	C3 00 12	JP   1200H	testování kláves.

Jestliže nyní stiskneme libovolnou klávesu, zobrazí se znak
klávesy obrazovce, Tento program se musí přerušit pomocí RESET.


6.3.2	INPUT ve strojovém jazyce
---------------------------------

     Zde jde jako v BASICu o to, zpracovávat celý řetězec znaků.
Tento program je uložen v monitoru 0003H. Program uloží celý
textový řetězec v ASCII kódu na adrese definovanou registrem DE.
Konec řetězce je automaticky ukončen 0DH.

	1200	11 00 20	LD   DE,2000H	oblast textu
	1203	CD 03 00	CALL 0003H	progr. INPUT
	1206	CD 06 00	CALL 0006H	nový řádek
	1209	CD 15 00	CALL 0015H	tisk textu
 	120C	C3 AD 00	JP   00ADH	skok do monitoru

     To je program, který přečte text, uloží ho od adresy 2000H a
potom text vytiskne ještě jednou na obrazovku (J 1200). Text si
můžeme prohlédnout příkazem monitoru D.


6.3.3.	Kursorový vstup ve strojovém jazyce
-------------------------------------------

     Další možnost vstupu znaku z klávesnice je pomocí programu
monitoru 09B3H. Při vyvolání tohoto programu bliká korsor na
obrazovce a čeká na vklad znaku z klávesnice. Jestliže je
stisknuta klávesa, je hodnota této klávesy ve video kódu v
akumulátoru.

	1200	CD B3 09	CALL 09B3H	vyzvedne znak
	1203	32 00 D0	LD   (D000H),A	umístní znak
	1206	C3 AD 00	JP   00ADH	skok do monitoru

Tento program vyzvedne znak z klávesnice a uloží ho na adresu
D000H. Tato adresa patří video-paměti a je to první adresa v této
paměti. Zna se tedy objeví na obrazovce vlevo nahoře.


	6.4.	Dimensování ve strojovém jazyce
	=======================================

     Nejpozději při ukládání dat do paměti potřebuje každý
programátor pole. V BASICu se pro to používá příkaz DIM, ve
strojovém jazyce si takový program musíme sami napsat. Nyní
provedeme jednoduché dimensování pole ve strojovém jazyce a
porovnáme ho s BASICem. Nejprve příklad v BASICu:

	10 DIM A(4)
	20 A(0)=10000:A(1)=10001:A(2)=10003:A(3)=10005:A(4)=0
	30 X=1:PRINT A(X)

Tento program by nám vytiskl na obrazovku číslo 10001. Naše data
musíme v paměti ukládat od definované adresy a to ne v dekadickém
systému, ale jako hexadecimální data. Uložíme našich pět dat za
adresu 3000H. Dá se říci, že začátek tabulky téměř odpovýdá jménu
proměnné. Jestliže bychom zvolili jiný začátek, dosáhli bychom
samozřejmě jiných hodnot.

     Za adresou 3000H v paměti musí být následující hodnoty
(překontrolujte pomocí příkazu D monitoru):

	D3000
	3000 10 27 11 27 13 27 15 27
	3008 00 00

To jsou hexadecimální hodnoty A(0) - A(4). Nyní botřebujeme dva
parametry

	a) naši proměnnou (zde adresa 3000H)
	b) naše X (příklad v Basicu)

Jestiže první parametr máme 3000H a druhý parametr 1H, měla by
nám být vydána hodnota 2711H (10001 dek.), jako příklad v BASICu.

	1200	3E 01		LD   A,01H	v Basicu X=1
	1202	21 00 30	LD   HL,3000H	začátek dat
	1205	87		ADD  A		když 16 bit  A*2
	1206	06 00		LD   B,06H	uložení hodoty z
	1208	4F		LD   C,A	akum. do BC reg.
	1209	09		ADD  HL,BC
	120A	5E		LD   E,(HL)
	120B	23		INC  HL
	120C	56		LD   D,(HL)
	120D	EB		EX   DE,HL
	120E	CD BA 03	CALL 03BAH	tiskne hodnotu HL
	1211	C3 AD 00	JP   00ADH	skok da monitoru

Jestliže nyní vložíme J1200, tak se na obrazovce objeví číslo
2711H. Nyní změníme adresu na 1201H, která odpovídá našemu X.
Jestliže napíšeme 0, dostaneme 2710H (10000 dek.).
     Uvnitř tohoto programu jsou části, které můžeme často použít
jako užitečné programy. Podívejme se na program ještě jednou.
     Neprve máme vstupy obou parametrů. potom. Potom provedeme
ADD,A proč ? Zcela jednoduše, jestliže máme 1 jako první parametr
a 3000H jako druhý parametr, pak adresa, na které je naše hodnota,
musí být 3002H, protože máme dvou bytové hodnoty. Čili musíme A
zdvojnásobit, pomocí ADD A. Potom musíme tuto novou hodnotu
akumulátoru přičíst k našemu začátku tabulky (začátek tabulky
je 3000H), což musí dát 3002H. Potřebujeme tedy jen program, který
sčítá HL a akumulátor (ADD HL,A).

	2000	C5		PUSH BC		zabraň BC, nutné
	2001	06 00		LD   B,00H	vlož do BC
	2003	4F		LD   C,A	      akumulátor
	2004	09		ADD  HL,BC
	2005	C1		POP  BC		vrať BC
	2006	C9		RET


Nyní chybí program, který z této adresy, která je v HL, uloží
16-ti bitovou hodnotu do registru HL, čili ulož do HL obsah adresy
z HL (LD HL,(HL)).

	2007	D5		PUSH DE		zabraň DE, nutné
	2008	5E		LD   E,(HL)
	2009	23		INC  HL
	200A	56		LD   D,(HL)
	200B	EB		EX   DE,HL
	200C	D1		POP  DE
	200D	C9		RET

Nyní můžeme program napsat ještě jednou s použitím podprogramu.

	1200	3E 01		LD   A,01H
	1202	21 00 30	LD   HL,3000H
	1205	87		ADD  A
	1206	CD 00 20	CALL 2000H	ADD HL,A
	1209	CD 07 20	CALL 2007H	LD  HL,(HL)
	120C	CD BA 03	CALL 03BAH	tisk na obrazovku
	1210	C3 AD 00	JP   00ADH	skok do monitoru

Program můžeme odstartovat opět pomocí J1200, měnit adresu 1201H.


	6.5.	Smyčky
	==============

     Smyčky jsou při vytváření programu velice důležitá věc, ale
při smyčkových proměnných, které jsou větší než 255, není možno
použít příkaz DJNZ. Zde se musí zhotovit nová smyčka. Napíšeme si
program, který nechá 1000 x zaznít tón (prosím raději nezkoušet,
chudák reproduktor).


	1200	01 E8 03	LD   BC,03E8H	uloží do BC 1000
	1203	C5		POSH BC		zajistí BC
	1204	CD 3E 00	CALL 003EH	zazní tón
	1207	C1		POP  BC
	1208	0B		DEC  BC
	1209	78		LD   A,B
	120A	B1		OR   C
	120B	C2 03 12	JP   NZ,1203H
	120E	C3 AD 00	JP   00ADH	skok do monitoru

Jak vidíte, registr BC je použit jako čítač smyček. Proto musí být
tato hodnota zajištěna pomocí PUSH BC, pro případ, že by registr
BC byl změněn uvnitř smyčky. Po provedení standartního programu,
ležícího ve smyčce (zde 003EH),musí být hodnota BC opět zajištěna.
Potom musí být počet smyček sníženo jednu a musí být zjištěno, zda
již není nolový, protože v tom případě by byl program přerušen.
Zjištění, zda registr BC je nulový se provádí kombinací LD A,B a
OR C. Vzpomeňme si, že pokud jsou obě části 0, je výsledek 0.
Takže pouze pokud jsou nulové oba registry B i C, je nastaven
Z-flag. Potom je smyčka přerušena, jinak se pokračuje v jejím
provádění.


	6.6.	Dvojkový výraz v akumulátoru
	====================================

     Zde je krátký příklad programu, který vytiskne obsah akumu-
látoru na obrazovku jako 8-místné dvojkové číslo. Dá se použít
jako podprogram.

	2000	C5		PUSH BC
	2001	F5		PUSH AF
	2002	06 08		LD   B,08H
	2004	07		RLCA
	2005	F5		PUSH AF
	2006	3E 30		LD   A,30H
	2008	30 01		JR   NC,200B
	200A	3C		INC  A
	200B	CD 12 00	CALL 0012H
	200E	F1		POP  AF
	200F	10 F3		DJNZ 2004
	2011	F1		POP  AF
	2012	C1		POP  BC
	2013	C9		RET

Základní myšlenka programu je v tom, že obsah akumulátoru je otá-
čen pomocí indikátoru přenosu. PO každé rotaci je indikátor
přenosu nastaven nebo ne, podle toho co obsahuje 7-mí bit s
akumulátoru. Jestliže je idikátor přenosu nastaven, vytiskne se
1, je-li nulový, vytiskne se 0.


	6.7.	Převod hexadecimálního čísla na dekadické
	=================================================

     Pomocí tohoto programu se obsah registru HL ohjeví na
obrazovce dekadické číslo.

	1200	A7		AND  A
	1201	ED 52		SBC  HL,DE	dělení mocninou 10
	1203	38 04		JR   C,1209H
	1205	3C		INC  A
	1206	10 F8		DJNZ 1200H
	1208	C9		RET
	1209	19		ADD  HL,DE   při přenosu korigovat
	120A	C9		RET
	120B	C5		PUSH BC		DE = BC
	120C	D1		POP  DE
	120D	AF		PUSH AF
	120E	C9		RET
	120F	00		NOP
	1210	CD 0B 12	CALL 120BH
	1213	06 0A		LD   B,0AH
	1215	CD 00 12	CALL 1200H	program dělení
	1218	C6 30		ADD  30H	převod do ASCII
	121A	C3 12 00	JP   0012H	vytisknutí
	121D	01 10 27	LD   BC,2710H	10000 dekadicky
	1220	CD 10 12	CALL 1210H
	1223	01 E8 03	LD   BC,03E8H	1000 dekadicky
	1226	CD 10 12	CALL 1210H
	1229	01 64 00	LD   BC,0064H	100 dekadicky
	122C	CD 10 12	CALL 1210H
	122F	01 0A 00	LD   BC,000AH	10 dekadicky
	1232	CD 10 12	CALL 1210H
	1235	01 01 00	LD   BC,0001	1 dekadicky
	1238	C3 10 12	JP   1210H

Když chceme tento program otestovat, např. chceme znát dekadickou
hodnotu hexadecimálního čísla C000H, musíme napsat

	2000	21 00 C0	LD   HL,C000H 	2003	CD 1D 12	CALL 121DH
	2006	C3 AD 00	JP   00ADH

Provedeme-li příkaz  J 2000  se na obrazovce objeví číslo 49152.
Nyní musíme jen uložit hexadecimální číslo na adresu 2001H,
spustit program a dostaneme příslušné decimální číslo.
     Ještě něco k porozumění programu. Dělíme naše číslo přísluš-
nými mocninami deseti tak dlouho, dokud nevznikne přenos, čili
nejprve 10000. Ve 43243 je obsaženo 4x, vytiskne se 4, zbytek
dělíme 1000 atd.


	6.8.	Převod dekadického čísla na hexadecimální
	=================================================

     Napíšeme krátký program, který vyzvedne pětimístné dekadické
číslo s klávesnice a převede ho na hexadecimální

	1200	CD B3 09	CALL 09B3H	vyzvedne číslo
	1203	CD CE 0B	CALL 0BCEH	Video kód na ASCII
	1206	F5		PUSH AF		zachraň vlož.číslo
	1207	CD 12 00	CALL 0012H	tisk čísla
	120A	F1		POP  AF		vyzvedne číslo
	120B	D6 30		SUB  30H	převádí na hexa.
	120D	47		LD   B,A	nastav. smyček
	120E	B7		OR   A		je číslo nula (0)
	120F	C8		RET  Z		když ano, pak zpět
	1210	19		ADD  HL,DE	přečte mocninu
	1211	10 FD		DJNZ 1210H
	1213	C9		RET
	1214	CD 06 00	CALL 0006H	posun řádky
	1217	21 00 00	LD   HL,0000H	inicializace HL
	121A	11 10 27	LD   DE,2710H
	121D	CD 00 12	CALL 1200H	vyvolání výpočtu
	1220	11 E8 03	LD   DE,03E8H	1000 dekadicky
	1223	CD 00 12	CALL 1200H
	1226	11 64 00	LD   DE,0064H	100 dekadicky
	1229	CD 00 12	CALL 1200H
	122C	11 0A 00	LD   DE,000A	10 dekadicky
	122F	CD 00 12	CALL 1200H
	1232	11 01 00	LD   DE,0001H	1 dekadicky
	1235	CD 00 12	CALL 1200H 	1238	CD 06 00	CALL 0006H	posun řádeky
	123B	CD BA 03	CALL 03BAH	tisk obsahu HL
	123E	C3 AD 00	JP   00AD	skok do monitoru

Tento program ze dá volat z monitoru příkazem  J 1214. Zadané
dekadické číslo se převedede na hexadecimální. Ještě něco k poro-
zumění. Při pětimístném čílse, např. 45225 se mohou jednotlivé
mocniny deseti nasčítat, takže principiálně se sčítání provádí
podle následujícího schematu.

	45225 = 4*10000 + 5*1000 + 2*100 + 2*10 + 5*1


	6.9	Přídavné příkazy Z-80
	=============================

     Přídavné příkazy Z-80 je něco, o čem není zmínka v žádné
literatuře o Z-80.
     Rozsah příkazů procesoru zahrnuje totiž asi 1000 příkazů,
místo známých 400. Z největší části se přitom jedná o příkazy, pro
řízení registrů HX, HY, LX a LY. Jak jsme se již zmínili, jedná se
přitom o 8-mi bitové registry a to vždy o vyšší a nižší byt
registru IX a IY. Přitom je opcode přikloněn ke kódům registrů H
a L, právě tak jako  IX a IY, právě tak jako IX, IY jsou
přikloněny k opcode registru HL.

	2000	26 77		LD    H,77H
	2002	DD 26 77	LD    HX,77H

Takže se jednoduše napíše DD nebo ED a už je možnost výběru z
obrovské palety příkazů. Musíme si dát pozor, protože téměř žádný
Disassembler není schopen tyto příkazy přečíst, protože memí
schopen tyto příkazy přečíst, protože o nich není nikde zmínka.
V naší nabídce naležnete Disassembler, který je schopen tyto
příkazy přeložit.



			MONITOR 1Z-013B
			===============

     Monitor 1Z-013B je 4 KB dlouhý provozní systém, který je
stále uložen v paměti ROM. V tomto monitoru jsou uloženy všechny
potřebné podprogramy, které jsou nutné k programování MZ-800.
Monitor je převzat od MZ-700, proto je s ním kompaktibilní. To
znamená, že všechny programy z MZ-700 mohou být provozovány na
MZ-800.
     Monitor 1Z-013B je uložen v paměti EPROM od adresy 0000H až
do 1000H. Normálně jsou volány pouze podprogramy tohoto monitoru.
Vlastní monitor se nikdy sám neaktivuje. Abychom se dostali k
tomuto monitoru musíme nejdříve provést následující úkony:

	1) Zapnout počítač, nebo stiskmout klávesu RESET
	2) Stlačit klávesu "M"
	3) Po objevení Cursoru "*" můžete pracovat

Nyní jste v monitoru 1Z-013B. Tento monitor obsahuje téměř tytéž
povely (tj.příkazy a instrukce) jako monitor popsaný v příručce
SHARP. Zmíníme se však o dvou rozdílech:
1) Povel GO (klávesa "G") je nyní klávesa "J" jako Jump
2) Pomocí povelu Bank Switching tj. stránkování paměti (klávesa
   "#") se dá ROM monitor vypnout. Současně způsobí tento povel
   "teplý" start Basic-interpreteru. Takže když jste nedopatřením
   skočili z Basic-interpreteru do ROM monitoru, můžete se tímto
   způsobem znovu dostat do Basicu, aniž byste ztratili program.
   (Jako stlačení klávesy "CTRL + RESET"současně.)

V monitoru 1Z-013B jsou definovány nejen základní povely,ale také
jsou k disposici všechny důležité podprogramy, jako například te-
stování klávesnice, tisk na obrazovku nebo řízení magnetofonu. 
Tyto standartní programy (rutiny) a způsob jejich funkce budou
posány dále v textu.

Pro porozumění dalšího popisu je nutná základní znalost programo-
vání ve strojovém jazyce, pro nováčky je vhodné si nejprve přečíst
kurs programování ve strojovém jazyce.

První díl monitoru tvoří tabulka skoků, která splňuje následující
hlavní funkce:
a) Umožňuje co největší kompatibilitu s předchozími modely
   MZ-80K a MZ-80A.
b) Důležité programy monitoru se snáze pamatují. Na programy mo-
   nitoru se skáče pomocí příkazu ve strojovém jazce  CALL ****H
   Po provedení programu v monitoru se automaticky skočí zpět k
   adrese, ze které byl program v monitoru zavolán (jako příkaz
   GOSUB v Basicu).


		Podprogramy monitoru
		====================

0000H  Start provozního systému v oblasti E
       Tento program způsobí skok na adresu E800H, to znamená na
       počáteční (startovací) adresu oblasti  E monitoru.

0003H  GET LINE   umožňuje vkládání řádků, čili více znaků z klá-
       vesnice. Vložený řetězec znaků je uložen do paměti na
       místo určené registrovým párem DE. Program končí stisknu-
       tím klávesy "CR". Po skončení podprogramu se za řetězec
       znaků přidá koncová značka (0DH). Tato značka je nutná k
       označení konce vloženého řetězce znaků. Kromě vložení ře- 
       tězce znaků se tento řetězec současně objeví na obrazovce.
       Maximálně může být vloženo 80 znaků.
       Při současném stisku kláves SHIFT a BREAK se na adresu,
       která je v registru DE, uloží BREAK-Code místo řetězce
       znaků a kód návratu je uložen na následující adrese.

0006H  NEW LINE   kursor se nastaví na začátek další řádky.
																	
0009H  NEW LINE   kursor se nastaví na začátek další řádky, pokud
       není na začátku řádky.

000CH  PRINT SPACE  vytiskne prázdný znak na momentální pozici 
       kursoru

000FH  PRINT 10 SPACES   vytiskne od momentální posice kursoru  
       maximálně 10 prázdných znaků až po další TAB-Posici(0,10,
       20,30)

0012H  PRINT CHARAKTER     vytiskne ASII znak uložený v akumulá-
       toru. Řídící znaky  11H - 16H  nevytvoří žádný znak, ale
       jejich funkce se provedou. Takže např. jestliže uložíme
       do akumulátoru 16H a zavoláme tento program, obrazovka se
       smaže (CLEAR-HOME)

0015H  PRINT  MESSAGE   vytiskne řetězec znaků počínaje posicí
       kursoru na obrazovce. Počáteční adresa řetězce znaků ,
       čili příslušná adresa v paměti musí být předem zadaná v
       registru DE. Řetězec znaků musí být ukončen 0DH (tj.znak
       klávesy "CR"}. Řídící znaky 11H-16H budou provedeny.

0018H  PRINT MESSAGE   vytiskne řetězec znaků počínaje posicí
       na obrazovce. Počáteční adresa v paměti se předá v
       registru DE. Řetězec musí být ukončen znakem 0DH. Řídící
       znaky 11H-16H se neprovádí, ale jsou obrácně vytištěny.

0018H  GET KEY   z klávesnice se přečte znak v ASCII kodu a tato
       hodnota je uložena v akumulátoru. Jestliže není stisknuta
       žádná klávesa, je v akumulátoru při návratu hodnota ODH.
       Zvláštní klávesy dávají odpovídající ASCII - hodnotu.

	Tabulka zvláštních kláves:

                     klávesa                   Hex - code
		     ------------------------------------
                     DEL                       60H
                     INST                      61H
                     ALPHA                     62H
                     GRAPH                     63H
                     SHIFT&BREAK               64H
                     CR (Return)               66H
                     Malá volná                90H

       Malá volná klávesa (tj.neoznačená klávesa nad klávesou CR)
       se u japonských modelů používá pro přepínání sad znaků 
       mezi Hiragana a Katagana. Klávesy funkcí nemohou být tímto
       programem testovány.

001EH  SHIFT, BREAK, CTRL      když je stisknuta klávesa BREAK,
       je příznak přenosu C (CARRY-Flag) nastaven na "1". Když  
       je stisknuta klávesa SHIFT, je 6. bit v akumulátoru  
       nastaven na "1". Při stisknutí klávesy CTRL je nastaven
       5. bit v akumulátoru na "1" a při současném stisknutí 
       kláves SHIFT a CTR je nastaven 4. bit v akumulátoru na "1".

0021H  WRITE HEADER   návěští začátku programu (header) je
       zapsáno na kazetu. Návěští začátku programu obsahuje
       následující data, která specifikují program:
       jméno programu, začátek programu, délka programu, kód sou-
       boru a startovací adresu. Vyjmenovaná data jsou uložena 
       na adresách 11F0H-1167H. Blíže viz obsazení pomocných 
       buněk monitoru.

0024H  WRITE DATA   program (blok dat) určený počáteční adresou
       a délkou se nahraje na kazetu. Program nebo blok dat se 
       pro jistotu nahrává dvakrát. Přenos je 1200 bitů za 
       vteřinu.
 0027H  READ HEADER   návěští začátku program je zavedeno do
       paměti. Návěští začátku programu obsahuje jméno programu,
       začátek programu, délku programu, kód souboru a starto-
       vací adresu.

002AH  READ DATA   nahrává do paměti program, určený počáteční
       adresou a délkou

002DH  VERIFY   srovnává se program nahraný na kazetě s programem
       v paměti. Při chybě ve srovnání, tzn. CHECK SUM ERROR, je 
       vydáno chybové hlášení.

0030H  MELODY   hraje hudbu odpovídající řetězci znaků, jehož 
       počáteční adresa je v registru DE. Řetězec musí být ukon-
       čen znakem 0DH nebo C8H. Navíc je v tomto  standartním 
       programu obsaženo testování stisknuté klávesy BREAK. Při 
       stisknutí této klávesy je nastaven příznak přenosu C.  

0033H  Nastavení a spuštění zabudovaných hodin.   Do akumulátoru 
       je vložena 0 nebo 1  (AM nebo PM) a registr DE je inicia-  
       lisován počtem vteřin (naximálně 43200, což odpovídá
       12 hodinám).

0038H  INTERRUPT   při povelu RESTART provede procesor Z-80 v 
       souvislosti s hardwarem větvení skok na adresu 0038H,
       protože tato adresa je v oblasti monitoru a nemůže být   
       změněna, skáče se automaticky na adresu 1038H, na kterou
       se může uložit libovolný INTERRUPT vektor.

003BH  READ TIME   přečte se momentální čas. V registru DE se po
       vyvolání toho standartního programu nachází počet vteřin
       (maximalně 43200, což odpovídá 12 hodin) a v akumulátoru
       je uložena 0 nebo 1.

003EH  BELL   vytvoří krátký tón o frekvenci 880 Hz.
   
0041H  TEMPO SET   určuje rychlost přehrání hudby v závislosti na
       bsahu akumulátoru. Jsou povoleny hodnoty od 01 do 07.
       Přitom 01H odpovídá pomalé rychlosti, 04H střední a 07H je
       rychle.

0044H  SOUD START   vytvoří stálý tón udané frekvence. Frekvence
       se vypočte následující rovnicí: F= 895 kHz/NM , přičemž NM        
       odpovídá 2 bytovému číslu v paměti na adrese 11A1H. Proto
       nutno dát pozor na to, že N musí být na adrese 11A2H
       a M na adrese 11A1H.

0047H  SOUD STOP   ukončí tón, vytvořený pomocí SOUD START

0041H  Start Monitoru 1Z-013B, ale po něm ihned následuje skok do
       E-oblasti za E800H.

00ADH  Teplý start Monitoru 1Z-013B. Po skoku na tuto adresu se
       nacházíte v monitoru 1Z-013B. V tomto monitoru jsou vám
       k disposici následující povely:

		J	Jump
		L	Load (z kazety)
		F	Flopy Boot
		B	Key BELL (tón při každém stisknutí klávesy)
		#	Teplý start Basicu (pro MZ-700 i MZ-800)
		P	Printer Test  (Test tiskárny)
                M	Memory Correction (oprava paměti)
		S	Save (na kazetu)
		D	Hexdump
		*	*


00F3H   JUMP (příkaz)   na tento standartní program se skočí při
        stlačení klávesy "J".

00F7H   BEEP (příkaz on/of)   na tento standartní program se
        skočí při stlačení klávesy "B".Při každém stisknutí  
        klávesy zapnut respetive vypnut.

00FFH   QUICK DISK   jesliže je připojena disková jednotka, skočí
        se na F000H, tzn. že je inicialisován Quid disk

0111H   LOAD (příkaz)   na tento standartní program se skočí při 
        stlačení klávesy "L".

0155H  Ploter Printer Test Befehl   povel testu kreslícího  
       zařízení ev. tiskárny. Na tuto standartní adresu se skočí 
       při stlačení klávesy "P".

018FH  PLOT/PRINT CHARACTER   ASCII hodnota v akumulátoru se  
       předá na plotter event. tiskárnu a vytiskne se. Některé  
       hodnoty jsou reservovány pro řízení plotteru. Podrobný 
       popis tohoto podprogramu je v kapitole řízení ploteru.
 01A5H  PLOT/PRINT MESSAGE   ASCII hodnoty v řetězci se jedna po
       druhé předávají na plotter ev. tiskárnu a vytisknou se. 
       Posice řetězce znaků se předává v registru DE. Řetezec  
       musí být ukončen znakem 0DH. Podrobný popis tohoto 
       podprogramu je v kapitole řízení plotteru.

01C7H  MELODY   jako 0030H.

02A6H  INCREMENT DE   registr je čtyřikrát inkrementován 
       (inkrementovat znamená zvýšit obsah o +1).

02ABH  SOUND START   jako 0044H

02BEH  SOUND STOP   jako 0047H

02E5H  SET TEMPO   jako 0041H

O2F3H  CRT MANAGMET   tento základní program se používá pro
       interní řízení obrazovky. Po naskočení programu jsou do
       registru HL vloženy souřadnice kursoru. Souřadnice X je
       v L, souřadnice Y je v H. Současně je v registru DE ulože- 
       na značka, která udává, zda momentální řádka je dvojnásob-
       ná ( tj.delší než 40 znaků). Značka leží v oblasti
       od 1173H do 118BH. Kromě toho je do akumulátoru vložena 0
       nebo 1 podle toho, zda je nebo není použita dvojnásobná 
       délka.

0308H  SET TIME   jako OO33H

0358H  READ TIME   jako 003BH

O38DH  TIME INTERRUPT   když byl nastaven indikátor příznaku  AM,
       smaže se a nastaví se indikátor PM, eventuelně obráceně.
       Současně se do časovače uloží 43200 vteřin.

03B1H  DISPLAY SPACE & CHARACTER   vytiskne prázdný znak a ASCII 
       znak, který je určen obsahem akumulátoru. Výtisk na obra-
       zovku se provede na Video RAM adresu určenou registrem HL.
 
03B1H  ASCII PRINT FOR HL   Obsah registu HL se vytiskne na      
       obrazovku od momentální posice kursoru

03C3H  ASCII PRINT FOR ACC   obsah akumulátoru se vytiskne na
       obrazovku od momentální posice kursoru. 
 03D5H  Data k přepnutí plotru na 80 znaků   na tomto místě v
       paměti jsou uložena data (01H, 09H, 09H, 09H, 0DH), která 
       jsou nutná k přepnutí plotru na 80 znaků.

03DAH  HEX TO ASCII   hexadecimální číslo ve 4 nižších bitech 
       akumulátoru se převede na odpovídající ASCII kód a uloží
       se v akumulátoru.
	
03E5H  ASCII TO HEX   převádí hexadecimální číslo, které je jako
       ASCII znak uloženo v akumulátoru, na dvojkové číslo a
       ukládá výsledek do 4 nižších bitů akumulátoru. Při chybě
       je nastaven příznak C (tj. CARRY -Flag).

03F9H  ASCII TO HEX   jako 03E5H.

0410H  FOUR CHARACTER ASCII CONVERSION   převádí řetězec, který
       představuje 4 místné hexadecimální číslo v ASCII formátu
       na hexadecimální číslo a ukládá ho do registru HL. Registr
       DE musí obsahovat počáteční adresu řetězce znaků, který
       obsaje čtyřmístné hexadecimální číslo v ASCII formátu.
       Tento standartní program tedy převádí čtyřmístný řetězec 
       znaků např. "3410" na 16-ti bitové hexadecimální číslo.
       Při chybě, která může být způsobena neplatným řetězcem  
       znaků, se nastaví indikátor přenosu C na "1".
       (Flag C je "1") .

041FH  TWO CHARACTER ASCII CONVERSION   převádí řetězec, který
       představuje dvoumístné hexadecimální číslo v ASCII formá-
       tu,na hexdecimální číslo a ukládá ho do akumulátoru.
       Registr DE musí obsahovat počáteční adresu řetězce znaků
       který představuje dvoumístné hexadeciální číslo v ASCII
       formátu. Při chybě, která musí být způsobena neplatným
       řetězcem znaků, je indikátor přenosu CARRY nastaven na "1"

0436H  WRITE HEADER   jako 0021H

0470H  Data k přepnutí plotru na 40 znaků. Na tomto místě v pamě- 
       ti jsou uložena data (01H, 09H, 09H, 0BH, 0DH), která jsou
       nutná k přepnutí plotru na 40 znaků.

0475H  WRITE DATA  jako 0024H

04D8H  READ HEADER   jako 0027H

04F9H  READ DATA   jako 002AH 
O577H  BELL   jako 003EH

057EH  FLASHING AND KEYIN   z klávesnice se přečte znak ve 
       Video-códu a uloží se do akumulátoru. Současně bliká 
       kursor. Není-li stisknuta žádá klávesa, je do akumulátoru 
       uloženo F0H a je nastaven příznak Zero
       (bit Z v registru F je nastaven na "1")

0588H  VERIFY   jako 002EH

05FAH  NEW LINE AND ASCII PRINT FOR HL   na obrazovku se vytiskne
       na  začátek nové řádky obsah registru HL.

069FH  CASSETTE MOTOR ON   zapíná motor magnetofonu

0700H  CASSETTE MOTOR OFF   zapíná motor magnetofonu

0759H  107 MICROSECOND DELAY   časové zpoždění 107 mikrosekund

07A8H  M-BEFEL   povel opravy paměti

07E6H  GET LINE   jako 0003H

087CH	Tento standartní progaram provádí návrat vozíku a
        nastavuje kursor na začátek na další řádky.

0893H	PRINT MESSAGE   jako 0015H

08A1H	PRINT MESSAGE   jako 0018H

08BDH	GET KEY   jako 001BH

090EH	NEW LINE   jako 0006H

0918H	NEW LINE   jako 0009H

0920H	PRINT SPACES   jako 000CH

0924H 	PRINT 10 SPACES   jako 000FH

0935H	PRINT CHARACTER   jako 0012H

0996	7 MILLISECOND DELAY   časové zpoždění 7 milisekund.
 09B3H	INPUT KEY   tento standartní program čeká s blikajícím
	kursorem tak dlouho, dokud není vložen znak z klávesnice
	Ovšem nemusí být stisknuto "CR" (Return). Odpovídající 
	hodnota stisknté klávesy ve Video-codu je uložena
	v akumulátoru.

0A32H	SHIFT, BREAK, CONTROL   jako 001EH

0A50H	Testování sítě klávesnice.   pomocí tohoto standarního 
	programu můžete přímo testovat klávesnici. Můžete
        testovat i klávesy funkcí.
	Jestliže se skočí do tohoto programu, zatím co je
        stisknuta nějaká klávesa budou registry B a C obsahovat 
	následující data:

	B -registr:

        7  bit	je 0	,jestliže nebyla stisknuta žádná klávesa
	7  bit	je 1	,jestliže   byla stisknuta nějaká klávesa
	6 bit 	je 0	,jestliže nebyla stisknuta klávesa SHIFT
	6 bit	je 1	,jestliže   byla stisknuta klávesa SHIFT
	5 bit   je 0    ,jestliže nebyla stisknuta klávesa CTRL
	5 bit	je 1	,jestliže   byla stisknuta klávesa CTRL
	4 bit	je 0	,jestliže nebyly současně stisknuty
			 klávesy SHIFT a CTRL
	4 bit	je 1	,jestliže   byly současně stisknuty
			 klávesy SHIFT a CTRL

	C -registr:

	bity	0, 1, 2	,dávají číslo řádku   sítě klávesnice
	bity	3, 4, 5 ,dávají číslo sloupce sítě klávesnice


	MATICE KLÁVESNICE
	-----------------

  Tastaturabtastung {$E000H}            Tastendaten {$E001H} 

              F0  - F1 - F2 - F3 - F4 - F5 - F6 - F7  -  F8
   řada/sloup. 1   - 2  - 3  - 4  - 5  - 6  - 7  - 8   -  9  - 10
  --------------------------------------------------------------
  D7/11	--- neoz  - Y  - Q  - I  - A  - 1  - \ -INST - BREAK- F1
  	 !        !    !    !    !    !    !   !     !      !
  D&/12 --- GRA   - Z  - R  - J  - B  - 2  - ~ - DEL -  CTRL- F2
	 !	  !    !    !    !    !    !   !     !      !
  D5/13 --- libra - @  - S  - K  - C  - 3  - - - nahor      - F3
	 !	  !    !    !    !    !    !   !     !      !
  D4/14 --- ALPH  - [  - T  - L  - D  - 4  - S - dolů       - F4
	 !	  !    !    !    !    !    !   !     !      !
  D3/15 ---       - ]  - U  - M  - E  - 5  - 0 - vlevo      - F5
	 !	  !    !    !    !    !    !   !     !      !
  D2/16 ---   :   -    - V  - N  - F  - 6  - 9 - vprav      -
	 !	  !    !    !    !    !    !   !     !      !
  D3/17 ---   ;   -    - W  - O  - G  - 7  - , -  ?  -      -
	 !	  !    !    !    !    !    !   !     !      !
  D0/18 ---  CR   -    - X  - P  - H  - 8  - . -  /  - SHFT -
  --------------------------------------------------------------

0A92H	ASCII TO DISPLAY CODE TABLE   od této adresy jsou data
	pro převádění z ASCII kódu do Video-kódu.

0BB9H	ASCII TO DISPLAY   převádí ASCII znak v akumulátoru do
	Video-kódu (Display-code, zobrazovací cód) a ukládá 
	tento kód do akumulátoru.

0BCEH   DISPLAY TO ASCII    převádí Video-kód v akumulátoru na
	ASCII znak a ukládá ho do akumulátoru.

0BEAH   MATRIX TO DISPLAY CODE TABLE   od této adresy v      
	paměti jsou Video-bity, odpovídající síti klávesnice,
        Když např. po vyvolání 0A50H, je v registru C uloženo
	07H, potřebujeme si v této tabulce najít pouze 7 byte 
        (počínaje od 0 a ne od 1  !) 7 byte je CDH a tím odpo-
        vídá klávese CR.

0BEAH	KEY MATRIX TO DISPLAY CODE TABLE Normaler   normální

0C2AH   KEY MATRIX TO DISPLAY CODE TABLE  při stisknutí SHIFT

OC6AH	KEY MATRIX TO DISPLAY CODE TABLE  při stisknutí GRAPH
 OCAAH	KEY MATRIX TO DISPLAY CODE TABLE  při stisknutí CTRL 

0CE9H	KEY MATRIX TO DISPLAY CODE TABLE  při přepnutí na
	Katagana (tj. neoznačené tlačítko). Tato tabulka není
	u evropských modelů použita.

OD29H	D - povel k zobrazení zvolené části paměti.

ODA6H	VERTICAL BLANKING CHECK   zjišťuje zda probíhá období 
	vertikálního nulování (zatemnění). Řízení je vráceno
	vyvolávajícímu programu, je-li vstupováno během tohoto
	období.

ODB5H	DISPLAY CODE CHARACTER PRINT   na momentální pozici
	kurzoru na obrazovce se vytiskne znak, jehož Video-
	kode je uložen v akumulátoru.

ODDCH   DISPLAY CONTROL   pomocí tohoto standartního programu
	se dá měnit zobrazení na obrazovce. Přitom akumulá-
	tor obsahuje odpovídající řídící znak. Řídící znaky
	a jejich působení jsou následující:

	akumulátor      způsobí
        -------------------------------------------------------
	COH 	        přetočení obrazovky o řádku dolů
	C1H             kurzor se posune o řádku dolů
	C2H             kurzor se posune o řádku nahoru
	C3H             kurzor se posune o znak doprava
	C4H      	kurzor se posune o znak doleva
	C5H		kurzor se nastaví na pozici HOME(D000H)
	C6H		Video - RAM a barvy v RAM se vymažou,
			kurzor je nastaven na pozici HOME.
	C7H		písmeno za kurzorem se vymaže a 
			kurzor se nastaví na tuto pozici.
			Stejná funkce jako klávesa "DEL".
	C8H		Na momentální pozici kurzoru se vsune
			písmeno a všechna ostatní písmena za
			tímto se posunou doprava. Stejná funkce
			jako klávesa "INST".
	C9H		přepíná klávesnici z grafického módu
			do alfa módu
	CDH		provede se návrat vozíku (CR) a kurzor
			se nastaví na začátek dalšího řádku na
			obrazovce.
  0F5EH	S - povel   SAVE   uložení.

0FB1H	momentální pozice kurzoru se převede na Video RAM adresu
	a uloží se do registru HL.

0FCBH	V - povel   VERIFY   ověřovací příkaz.

0FD8H	vymaže paměť od adresy v regustru HL. Délku mazané paměti
	udává registr B. Vymazání znamená uložit do oblasti
	paměti data 00H.

Monitor 1Z-013B potřebuje oblast RAM od 1000H - 11FFH jako pra-
covní oblast, tzn., že v této oblasti paměti se ukládají všechna
potřebná data.


	Obsazení pomocných buněk monitoru (pracovní oblast)
	===================================================

adresa		význam

1000H - 1037H	volný

1039H		nižší byt vektoru přerušení

103AH		vyšší byt vektoru přerušení
		Při přerušení se skočí na zde uvedený vektor
		přerušení (adresu).

103BH - 10EFH	oblast zásobníku
		Normálně se v této oblasti nachází u každého
		programu zásobník.

10EFH		TOP DE STACK   konec zásobníku

10F0H - 1107H	data návěští začátku programu

10F0H		kód souboru FILECODE (druh programu)
		označují program v Basicu, Assembleru atd.
		01  =  program ve strojovém jazyku
		02  =  program v MZ-80K Basiku
		03  =  data v MZ-80K Basicu
		05  =  programy v Basicu MZ-700 a MZ-800

10F1H - 1101H	jméno programu
 		Jméno programu může být dlouhé maximálně
		16 znaků a musí být ukončeno znakem 0DH (CR).
		Jestliže na adrese 10F1H je 0DH, nemá program
		žádné jméno.

1102H		nižší byte délky programu

1103H		vyšší byte délky programu
		Zde uložená délka programu je rozhodující pro
		počet bytů, které se při programu SAVE uloží
		na kazetu

1104H		nižší byte začátku programu

1105H		vyšší byte začátku programu
		Od zde uložené počáteční adresy se začne 
		program nahrávat na kazetu při skoku do stan-
		dartního programu SAVE (0024H)

1106H		nižší byte startovací adresy

1107H		vyšší byte startovací adresy
		Na této adrese závísí, zda bude nahraný program
		automaticky proveden. Jestliže má být program
		automaticky odstartován, musí na těchto dvou
		adresách být startovací adresa programu, který
		má být proveden. Startovací adresa musí být
		větší nebo rovna 1200H. Při 0000H se program
		neodstartuje.

1108H - 116FH	vstupní buffer (vyrovnávací paměť)
		Tyto buňky paměti se používají jako vstupní 
		vyrovnávací paměť.

1170H		značka pro malá nebo velká písmena
		Obsah 0 odpovídá velkým písmenům.
		Obsah 1 odpovídá malým písmenům.

1171H		Y - pozice kurzoru (0-18H)
		Označení řádky pozice kurzoru.

1172H		X - pozice kurzoru (0-27H)
		Označení sloupce pozice kurzoru.

1173H - 118BH	pro každou řádku obrazovky jeden byt, který 
		udává, zda je řádka druhá část dvojité řádky.
		V tom případě je obsah 1, jinak 0.
 118EH		značka pro uložení znaku, na kterém je momentálně
		kurzor

118FH		značka pro pozici kurzoru - nižší byt
1190H		značka pro pozici kurzoru - vyšší byt
		Použito jen u modelu předcházejícího MZ-8OK.

1191H		značka, zda je zobrazen kurzor nebo znak.
		0 = znak, 1 = kurzor. Použito jen u modelu
		předcházejícího MZ-80K.

1192H		zobrazovací kód znaku kurzoru

1193H		STRING-flag
		Použito jen u modelu předcházejícího MZ-80K.

1194H		značka pro počet znaků ve vkládané řádce

1195H		délka předpětí kazety nižší byt

1196H		délka předpětí kazety vyšší byt
		Označení délky předpětí pri nahrávání, resp.
		čtení kazety.

1197H		kontrolní součet při nahrávání do počítače
		nižší byt

1198H		kontrolní součet při nahrávání do počítače
		vyšší byt
		V těchto buňkách je uložena kontrolní suma 
		při nahrávání z kazety. Kontrolní suma je 
		počet jednotkových bitů v nahraných bytech.
		Tento součet slouží ke zjištění chyb nahrávání.

1199H		kontrolní součet při nahrávání na kazetu
		nižší byt

119AH		kontrolní součet při nahrávání na kazetu
		vyšší byt
		Označení kontrolní sumy při nahrávání na kazetu.
		Kontrolní suma jako u 1197H  1198H.

119BH		označení pro AM/PM (hodiny)
		AM = 0, PM = 1

119CH		označení běhu hodin
		Při obsahu FOH běží zabudované hodiny
 119DH		označení KEY-SOUND
		Označení pro vytvoření tónu při stisku klávesy.
		Tón = 0, bez tónu = 1.

119EH		paměť pro tempo hudby

119FH		paměť pro délku tónu

11A0H		paměť pro číslo oktávy

11A1H		paměť pro frekvenci  nižší byt

11A2H           paměť pro frekvenci  vyšší byt

11A3H - 11F3H	vstupní vyrovnávací paměť klávesnice

11F4H - 11FFH	volné


	Monitor  E - oblasti
	====================

Monitor E - oblasti je druhý, přes 4 KB dlouhý provozní systém,
který je též stále uložen v oblasti ROM. Monitor E - oblasti
leží, jak již jméno napovídá, v horní oblasti paměti od E010H
po F36CH.

V této oblasti leží všechny standartní programy pro Quick disk
a další monitor 9Z-504M.

Při spuštění počítače a při každém stisknutí RESET se automa-
ticky skočí na adresu 0000H. Odtud se ale ihned skočí na E800H
a objeví se ihned počáteční obraz. Jestliže stisknete klávesu
"M" jako Monitor, nalézáte se v Monitoru 9Z-504M.

Podrobnější popisy standartních programů pro Quick disk viz
též v kapitole Quick-disk.

E010H	QD-IOS   hlavní inicializační program operačního
	systému Quick-disku. Podle toho, jaký je obsah
	buňky paměti QDPA (1130H), vyvolají se následující
	standartní programy:
	1 = Quickdisk  READY-Check
	    Zkoumá, zda je Quickdisk připojen a připraven
	    k provozu
	2 = FORMAT
	    Formátuje Quick-disk
	3 = READ
	    Čte z Quick-disku
	4 = WRITE
	    Píše na Quick-disk

E08AH	standartní program kontroly připravenosti Quick-disku 
	(READY-Check)

E090H	standartní program FORMAT

E0DAH	standartní program READ

E14EH	standartní program WRITE

E29BH	QD MOTOR ON  zapíná motor Quick-disku

E2E8H	QD MOTOR OFF  vypíná motor Quick-disku

E44AH	program řízení floppy disku   řídí připojenou
	disketovou jednotku

E4DCH	program kontroly připravenosti floppy disku
	Kontroluje, zda je připojena disketová jednotka
	a zda je připravena k provozu.

E517H	FD MOTOR ON  zapíná motor disketové jednotky

E530H	FD MOTOR OFF  vypíná motor disketové jednotky

E800H	tabulka skoků   na toto místo se skáče okamžitě
	po zapnutí nebo po resetu

E801H	skok do monitoru MZ-800 (počáteční obraz)

E804H	skok do monitoru 9Z-504M

E807H	nahrání z kazety za 1200H

E80AH	nahrání na kazetu od 1200H

E80DH	verifikace kazety od 1200H

E810H	skok na QD-IOS, tedy na E010H

E813H	začátek monitoru MZ-800 (počáteční obraz)
	V této části programu se inicializují všechny
	důležité součásti a adresy, jako např. část
	port 8255, časovač 8253, Z-80 PIO, SIO

E876H	inicializace barev obrazovky a tempa hudby

E8A9H	do paměti programovatelného generátoru znaků se
	nahraje obsah generátoru znaků ROM, tzn., že znaky
     	pevně uložené v CG-ROM (CG = znakový generátor)
	se přenese do PCG - RAM.

E8E1H	inicializuje se paleta barev a barvy okraje

E945H	IPL   nahrávač z kazety    nahrání programu 
	z kazety a odstartování

EA5EH	testování povelů monitoru 9Z-504M
	Monitor 9Z-504M obsahuje následující povely:

	J = JUMP
	L = nahrání z kazety
	F = inicializace floppy disku
	B = BELL on/off (vypnutí nebo zapnutí tónu při
	    stisku klávesy)
	M = oprava paměti
	S = nahrání na kazetu
	V = verifikování kazety
	D = HEXdump
	Q = Quickdisk (s dalšími parametry, jako QL, QS, QD atd)
	E = Exit Ramboard
	G = Goto$

EAA9H	J - povel

EAB5H	Q - povel
	Jsou možné následující povely pro Quickdisk:

	QL = nahrání z Quickdisku
	QS = nahrání na Quickdisk
	QC = kopírování Quickdisku
	QF = formátování Quickdisku
	QX = přenos z kazety na Quickdisk
	QD = adresář Quickdisku

EB34H	GETLINE s testováním BREAK
	Tento standartní program umožňuje vložení řádky, čili 
	více znaků, z klávesnice. Vložený řetězec znaků se uloží
	do vstupní vyrovnávací paměti, takže od místa v paměti
	11A3H. Standardní program končí po stisknutí klávesy CR.
	Po skončení tohoto podprogramu se na konec řetězce znaků
	automaticky přidává 0DH. 
EB4CH	L - povel

EBAEH	S - povel

EC00H 	V - povel

EC1EH 	B - povel

EC29H 	M - povel
   
EEA7H 	QUICK DISK LOAD    povel nahrání z quick disku. Od
	této adresy je uložen kompletní povel ( Quickpodprogram)
	s dotazem na parametry.

EF2EH	QUICK DISK SAVE   povel nahrání na quick disk
	Od této adresy je uložen kompletní povel nahrání na
	quick disk s dotazem na parametry.

EFEFH	QUICK DISK DIRECTORY   povel adresáře quick disku.

F0B5H	QUICK DISK FORMAT   povel formátování quick disku.
	Od této adresy je uložen kompletní standartní program
	formátování quick disku s dotazem "OK (Y/N)".

F12CH	QUICK DISK COPY   povel kopírování quick disku.
	Od této adresy je uložen kompletní program kopírování
	quick disku s dotzem na jméno programu.

F1A2H	CASSETTE TO QUICKDISK COPY    povel kopírování
	z kazety na quuick disk. Od této adresy je kompletní
	program kopírování z kazety na quick disk s dotazem na
	jméno programu.

F202H	Error Tabelle   tabulka chyb. Hodnotám chyb se zde při-
	řazují odpovídající chybová hlášení.
 
      Obsazení pomocných buněk monitoru E-oblast
      ------------------------------------------
                   (pracovní oblast)
                   -----------------

    Monitor E-oblasti potřebuje právě tak jako monitor 
1Z-013B pracovní oblast. Většina paměťových buněk, důležitých
pro uživatele je používána pro řízení quick disku. 
    Právě tak, jako v monitoru 1Z-013B se pro ukládání na disk
musí zřídit návěští začátku programu, jak je již známo z povelů
pro řízení magnetofonu.
    Toto je ale podrobně probráno s komentovaným příkladem v 
Basicu v kapitole o quick disku.


               GRAFIKA S VYSOKOU ROZLIŠITELNOSTÍ    
              ===================================

  U MZ-800 jsou dvě rozlišitelnosti obrazovky.

  a)  320 x 200 bodů =  64000 bodů/bitů =  8 kBytů
  b)  640 x 200 bodů = 128000 bodů/bitů = 16 kBytů

    Již v základním modulu je možné použít obě rozlišitelnosti,
ale opravdu efektivní je teprve přídavná grafická paměť, která
umožňuje určení 128000 bodů ve 4 ze 16-ti barev. Ale již se zá-
kladní verzí MZ-800 máte možnost si vyzkoušet práci s barvami.
    Máte následující možnosti:

a) Základní verze MZ-800

    V-RAM velikost     barev     rozlišitelnost     část DMD
----------------------------------------------------------------
      2x8 kByte         4           320 x 200          00H
       16 kByte         2           640 x 200          04H

b) MZ-800 s grafickým rozšířením (+16 kByte)

      2x8 kByte         4           320 x 200          00H  
                               použita stará V-RAM (Frame A)
      2x8 kByte         4           320 x 200          01H
                               použita přídavná V-RAM (Frame B)
      4x8 kByte        16           320 x 200          02H
                                                   obě V-RAM
     1x16 kByte         2           640 x 200          04H
                               použita stará V-RAM (Frame A)
     1x16 kByte         2           640 x 200          05H
                               použita přídavná V-RAM (Frame B)
     2x16 kByte         4           640 x 200          06H
                                                   obě V-RAM
   MZ-700 systém        8            40 x 25           08H
                                             1/2 staré V-RAM

    Jistě jste se již zajímali o to, co znamená DMD. DMD znamená
Displey mode register a slouží pro výběr druhu grafického zobra-
zení. Přes port CEH se vydává odpovídající hodnota v akumulá-
toru. 
Příklad:
            6000 3E 00         LD A,00H
            6002 D3 CE         OUT (CEH),A

    Příslušná grafická paměť leží od adresy 8000H až po maximál-
ně BFFFH, když je grafická paměť plně otevřena. Při tom leží
všechny paměti paralelně s vyjímkou módu 640 x 200 ve 2 barvách.
To znamená, že při způsobu zobrazení DMD 00H leží 2 paměti pa-
ralelně u sebe od adresy 8000H po 9FFFH. Vždy jsou 2 barvy pamě-
ti. Jestliže tedy leži paralelně 4 paměti, můžeme použít součas-
ně 2^4 => 16 barev. Proč současně? Nyní přecházíme ke zvláštnos-
ti v druhu a způsobu, jakým musí být barvy použity. Barvy musí 
být kódovány přes palety. Zásadně se každé paletě přiřadí jedna
ze 16-ti barev. Zde bychom se chtěli zabývat možnostmi, které
poskytuje základní verze MZ-800.
    Jak již bylo jasné z předcházejícího přehledu, mohou se pou-
žít 4 barvy. Nyní tedy nejprve přiřadíme každé paletě jednu bar-
vu. K dispozici jsou následující barvy:

            0H ... černá
            1H ... modrá
            2H ... červená
            3H ... fialová
            4H ... zelená
            5H ... zelenomodrá
            6H ... žlutá
            7H ... bílá
            8H ... šedá
            9H ... světle modrá
            AH ... sv. červená
            BH ... sv. fialová
            CH ... sv. zelená
            DH ... sv. zelenomodrá
            EH ... sv. žlutá
            FH ... sv. bílá

    V základním vybavení máme nyní k dispozici 4 barevné palety.
Můžeme tedy říci: paleta 0 = sv. červená, paleta 1 = zelená atd.
Toto přiřazení se provádí pomocí povelu OUT. Hodnota, která se
bude přes port F0H vydávat, se rozdělí na nižší a vyšší 4 bitové
slovo. Do vyššího 4 bitového slova se potom napíše číslo palety,
do nižšího slova barva. Například chceme paletě 2 přiřadit šedou
barvu (šedá = 08H). Na to musí být napsán následující program:

            1200 3E 28  LD A,28H       2=paleta;8=barva
            1202 D3 F0  OUT (F0H),A    inicializace palety 2 
						šedou barvou 
Pozn.: Platí pouze pro 2 a 4 barevný režim (ne pro 16 bar. režim)

    Velice důležité je ještě aktivování grafiky všeobecně. To se
provádí povelem IN A,(E0H). Grafika se znovu deaktivuje povelem 
IN A,(E1H). Tento způsob zakódování palet má výhody, ale i nevý-
hody. Nevýhoda je zakódování jako takové; nejdříve se musí ini-
cializovat, což může stát nervy. Naproti tomu se ale musí říci, 
že se pomocí nového přiřazení dají okamžitě změnit např. všechny
zelené body na červené. Důležité je ještě, že při použití gra-
fického rozšíření máte možnost kreslit dva obrazy přes sebe a 
tím míchat barevné tóny. Pomocí části DMD se potom může vybrat, 
který obraz má být zobrazen. 
    Nyní se dostaváme k další kapitole, čtení dat. To se prová-
dí s pomocí RF(READ - format register). Nižší čtyřbitové slovo
obsahuje specifikaci detekovaného grafického plann a nebo defi-
nici kódu palety, který je potřebný pro READ (čtecí) 0perace.
Existují dva způsoby čtení:

1. Single

        RF=|0|x|x|1/0|1/0|1/0|1/0|
                   { p l a n y }

        Čte z planů specifikovaných  jako 1. Je-li nalezeno ví-
        ce planů provádí operaci AND. Není-li specifikován žad-
        ný plan vrací hodnotu FFH.(Při čtení z VRAM).

2. Search

        RF=|1|x|x|A/B|1/0|1/0|1/0|1/0|
                   |   {číslo palety}  
                   |
                   |
                   FRAME A=0;B=1

        Vrací bit 1 tam, kde se vyskytuje specifikovaná paleta.
        (Jinak 0).

Výsledná kontrola pro RF registr se vydává přes port CDH.
     Podobně jako pro čtení platí též pro psaní. Zde se používá
tomu odpovídající Writhe Format Register. Jako u RF registru od-
povídají nižší čtyři bity paletě,kterou se má psát. Bit 4 se po-
užívá opět jen tehdy, když chceme současně zpracovávat dva obra-
zy. (Má vliv pouze na REPLACE a PSET). Bit 5-7 ale představují
něco jako mód způsobu provozu. Je 6 způsobů, jak se dá použít.

     a) Single Write (0H)
        - - - - - - - - -
        Při tomto způsobu se zeptá na specifikované plany; jiné
        plany se nemění.

     b) Exor (1H)
        - - - - -
        Zde se programem ukládaná data spojují pomocí logické 
        operace exklusivní nebo (XOR), a to v nižším 4 bitovém
        slově stojící hodnoty; ostatní se nemění.

     c) Or (2H)
        - - - -
        Funguje jako EXOR, ale s logickou operací nebo.

     d) Reset (3H)
        - - - - - -
        Ve specifikovaných grafických planech se obnoví počá-
        teční stav těch bodů, které byly nastaveny daty.

     e) Replace (4H)
        - - - - - - -
        Ukládá data do specifikovaných grafických planů(desek);
        ostatní grafické plany obdrží hodnotu 0. REPLACE umož-
        nuje psaní v jedné určené barvě palety.

      f) Pset (6H)
         - - - - -
         PSET je pro nás nejzajímavější povel, protože se s ním
         mohou barevně nastavit jednotlivé body. Mód palety daný
         nižším čtyřbitovým slovem se dosadí na defiovanou adre-
         su v grafické paměti.

    Je vidět, že není jednoduché se s grafikou s velkou rozliši-
telností spřátelit, a proto napíšeme krátký příklad, který nas
taví bod na obrazovce na libovolnou barvu. Ještě se musí dát po-
zor na to, že programy pro grafiku s vysokou rozlišitelností se
nikdy nesmí psát od oblasti paměti 8000H a výše, protože při 
stránkování paměti by se program zhroutil, neboť by najednou 
pracoval ve špatné paměti. Jako příklad chceme nastavit bod ve
středu obrazovky-červený. Přitom pozadí má být černé.

    6000 DB E0    IN  A,(E0H)    aktivace grafiky
    6002 3E 00    LD  A,00H      aktivace graf. provozu 320x200
                                 pixel
    6004 D3 CE    OUT (CEH),A    aktivace
    6006 3E 00    LD  A,00H      paleta 0=černá
    6008 D3 F0    OUT (F0H),A
    600A 3E 03    LD  A,00H      mód single write s paletou 0
    600C D3 CC    OUT (CCH),A    paleta 0
    600E 21 00 80 LD  HL,8000H   zač. RAM s vys. rozlišitelností
    6011 01 00 20 LD  BC,2000H   délka RAM ----------"----------
    6014 AF       XOR A          akumulátor=0
    6015 77       LD  (HL),A     vymaž paměť pro grafiku s vy-
                                 sokou rozlištelností
    6016 23       INC HL
    6017 0B       DEC BC
    6018 78       LD  A,B
    6019 B1       OR  C
    601A C2 14 60 JP  NZ,6014H   maž dál, když BC není 0
    601D 3E 32    LD  A,32H      přiřazuje paletě 3 červenou
    601F D3 F0    OUT (F0H),A    
    6021 3E C3    LD  A,C3H      zpracovávat módem PSET s pale- 
    6023 D3 F0    OUT (F0H),A    tou 3
    6025 3E 01    LD  A,01H      1 pixel přidat do středu       
    6027 32 00 90 LD  (9000H),A  obrazovky
    6029 DB E1    IN  A,(E1H)    obnovení počátečního stavu ob-
                                 razovky
    602B 76       HALT

    Tento program se může odstartovat z monitoru pomocí J 6000,
ale potom se musí udělat RESET, protože byl použit povel HALT
(STOP). V tomto módu není možné používat jednoduše písmo i gra-
fiku. Na to se musí vytvořit balík podprogramů. Definice módu
WRITE se provádí pomocí vyššího čtyřbitového slova hodnoty, kte-
rá se vydává přes port CCH.


		PCG  grafika.
                =============   

    V této kapitole se budeme zabývat PCG grafikou. PCG znamená 
Programmable Charackter Generator (programovatelný generátor 
znaků). Je schopen sám si naprogramovat každý znak sady znaků
a tím vytvářet například sadu ozdobných písmen pro psaní a mnohem
více jiných věcí. PCG nedělá v principu nic jiného, než povel 
Basicu PATTERN, ale PCG může být mnohem účiněji, protože znaky
mohou být uloženy do paměti a používány místo původních znaků.

    Abychom toho dosáhli, nejprve si vysvětlíme hardwerovou fun-
kci PCG. MZ-800 má vnitřní paměť, která leží u 1000H paralelně
k hlavní paměti. V této leží sada znaků (tedy 512 znaků), která
je uložena v 8 bytovém řádu. MZ-800 má, jak jsme se již zmímili
v kapitole MZ-700 Basic, 2 sady po 256 znacích. Tyto znaky ta-
bulky zobrazovacích kódů jsou také všechny ještě jednou vytiště-
ny v dodatku této knihy. Pro PCG grafiku je rozhodující tabulka
zobrazovacích kódů, ne ASCII tabulka, která je i v SHARP příruč-
ce. Každý znak potřebuje tedy 8 bytů, protože se skládá z 8x8 
jednotlivých bodů, takže z 64 jednotlivých bodů. S 8 byty máte
k dispozici přesně 64 bitů, takže každý ze 64 bitů odpovídá
jednomu bodu.

    Písmeno "A" se podle toho skládá z následujících bitů, kte-
ré přímo vyplývají z nastavených:

Hexadecimální        Dvojkový  kód        zobrazení  znaku
18                       00011000                 11
24                       00100100                1  1
42                       01000010               1    1
7E                       01111110               111111
42                       01000010               1    1
42                       01000010               1    1
42                       01000010               1    1
00                       00000000               1    1

   1 znamená, že příslušný světelný bod je nastaven
   0 znamená, že příslušný světelný bod není nastaven

    Uložení v paměti je tedy takové, že každý znak obsazuje v 
PCG paměti 8 bytů. Pro celou sadu znaků je tedy třeba 8x512 
bytů a přitom se musí rozlišovat mezi pevnou a dynamickou PCG 
pamětí. Při inicializaci se sada znaků přenese z pevné (ROM) PCG
paměti do dynamické (RAM) pomocí blokového přenosu. Tento postup
je bezpodmínečně nutný, protože základní znaky někde definovány
být musí, aby počítač po zapnutí vůbec mohl zobrazit písmena a 
znaky.
    
    Dynamická PCG paměť leží u C000H. Tato skutečnost vás ale
vůbec nemusí znepokojovat, protože PCG paměť neovlivňuje celkové
rozdělení paměti MZ-800 a vy jako uživatel si toho vůbec nevšim-
nete. Tohoto bychom chtěli využít a vytvořit program, kterým mů-
žeme sadu sadu znaků měnit. Přitom si musíme být vědomi,ze přímo
nemůžeme psát do pevné, ani do dynamické PCG paměti, ale jen do
naší normální paměti. Do ostatních oblastí se musíme dostávat 
pomocí IN(přepínat).Takže tedy program.

Program pro nahrání sady znaků na adresu A800H.
- - - - - - - - - - - - - - - - - - - - - - - - 
Adresa    Opkód    Mnemon. kód  Poznámka

A000      D3 E4    OUT (E4H),A  
A002      DB E0    IN  A,(E0H)  ;zapnutí PCG módu
A004      21 00 C0 LD HL,C000H  ;adresa PCG dynamické paměti
A007      01 00 10 LD BC,1000h  ;délka dat
A00A      11 00 A8 LD DE,A800H  ;adresa naší paměti
A00D      ED B0    LDIR         ; přenos dat
A00F      DB E1    IN A,(E1H)   ;obnovení počátečního stavu PCG
                                 módu  
A011      C3 AD 00 JP 00ADH     ;skok do monitoru

Program pro inicializaci PCG sady znaků do dynamické PCG paměti.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A014      D3 E4    OUT (E4H),A  ;
A016      DB E0    IN A,(E0H)   ;zapnutí PCG módu
A018      21 00 A8 LD HL,A800H  ;adresa naší paměti
A01B      01 00 10 LD BC,1000H  ;délka dat(4096 bytů)
A01E      11 00 C0 LD DE,C000H  ;adresa PCG paměti
A021      ED B0    LDIR         ;přenos dat
A023      DB E1    IN A,(E1H)   ;obnovení počáteč. stavu PCG mód
A025      C3 AD 00 JP 00ADH     ;skok do monitoru

    Oba tyto programy můžete vložit z monitoru (jednoduše - 
opcode s pomocí povelu M, a s JA000 resp. JA014 odstartovat). Od
adresy A800H leží tedy data sady znaků v hexadecimálním formátu.
Když vložíme J A014, přeneseme data na A800H. Nyní můžeme sadu
znaků měnit. Příklad pro změnu znaku SPACE:
    Protože každý znak zabírá 8 bytů, je znak 0 (SPACE) nyní    
uložen v paměti od A800H do A807H. Znak 1 (A) je uložen v pamě- 
tových buňkách A808H až A80FH.

a) JA000
b) MA800 00 FF (CR)
c) JA014

    Ihned po vložení se změní vzhled obrazovky. Objeví se černé
pruhy, které téměř představují FFH. Chtěli bychom ještě pro-   
vést takovou změnu pro každý znak.
    Následující vzorec výpočet adresy v paměti, na které je li-
bovolný znak, respektive kde jsou uloženy jeho hodnoty. 
    Adresa=A800H + 8 x číslo měněného znaku
    Pro znak DFH (223 decimálně) tedy platí
    Adresa=A800H + 8 x DFH = AEF8H

    Nyní se dostáváme ke zvlástnosti v uložení PCG hodnot. Tyto
jsou totiž v paměti napsány zrcadlově obráceně. Hned to prakti-
cky vyzkoušíme tím,že znak DFH což původně byla zmije, nyní změ-
níme na třešni. Musíme tedy nejdříve definovat třešni.

12345678    bitový vzor(zrcadlově obráceně)   hexadecimálně

***      1        00000111                     07 H
****     2        00001111                     0F H
 *  *    3        00010010                     12 H
 *   *   4        00100010                     22 H
 *  * ** 5        11010010                     D2 H
 ** **** 6        11110110                     F6 H
* ** **  7        01101101                     6D H
 **      8        00000110                     06 H

    Nyní vložíme z monitoru:

MAEF8
AEF8  00 07 (CR)
AEF9  03 0F (CR)
AEFA  13 12 (CR)
AEFB  2A 22 (CR)
AEFC  2A D2 (CR)
AEFD  AA F6 (CR)
AEFE  44 6D (CR)
AEFF  00 06 (CR)
SHIFT&BREAK

JA014

    Když necháme znak DF ojevit na obrazovce vidíme naši třešni.

MD000
D000  00 DF (CR)   (Objevení se třešně na obrazovce)
SHIFT & BREAK

    Vypočítat, kde se od A800H nachází správná adresa, je ale
relativně těžké. Nechme to proto prostě dělat počítat. Napíšeme 
program, který nahrazuje naši rovnici. Adresa = A800H+znak*8.

A100  3E xx        LD  A,xx            ;xx=hodnota znaku
A102  6F           LD  L,A             ;uloží se do HL
A103  26 00        LD  H,00            ;
A114  29           ADD HL,HL           ;
A115  29           ADD HL,HL           ;x8
A116  29           ADD HL,HL           ;
A117  01 00 A8     LD  BC,A800H        ;naše PCG paměť
A11A  09           ADD HL,BC           ;
A11B  CD BA 03     CALL 03BAH          ;zobrazení adresy
A11E  C3 AD 00     JP  00ADH           ;skok do monitoru

    Napíšeme tedy na adresu A101H náš znak, který chceme změnit 
a odstartujeme program pomocí J A100.
    Potom se na obrazovce objeví adresa, kde je v paměti uložen
znak s číslem xx (v zobrazovacím kódu). Při vložení by se potom 
objevilo A800H.
    Ještě něco všeobecného. PCG znaky nejsou jednotlivě, tedy 
bod po bodu, barevně nastavitelné. Je tedy možné nastavit jen
barvu a barvu pozadí pro celý znak. Toho dosáhneme pomocí grafiky
s vysokou rozlišitelností. Zde PCG grafika imponuje svojí rych-
lostí a relativně jednoduchou použitelností.


             Programovatelný zvukový generátor (PSG)
            =========================================

    MZ-800 má oproti mnoha jiným počítačům velkou výhodu ve 
velmi velké a komplexní zásobě povelů v Basicu. Při tom bylo 
pamatováno i na vnitřní zvukový čip, který muže být v určitých
mezích programován bez problémů v Basicu.
    Na tomto místě budiž řečeno, že v příručce OWNER'S MANUAL je
chyba v syntaxi. Na straně 6-83 je pod povelem NOISE napsáno,
že je možno použít dvou šumových tónů najednou, jestliže se 
jednotlivé parametry šumových tónů oddělí čárkou. Vnitřní PSG
ale může vytvářet pouze jedno šumění a tak není divu, že se podle
návodu k povelu NOISE nedá dosáhnout požadovaného efektu. Je tedy
současně možné pouze jedno šumění. Je to tzv. bílý šum (podle
SHARP).
    Později se budeme blíže zabývat ještě jedním druhem šumu, 
ale ten nemůže být vyvolán pomocí povelu NOISE. 
    Vycházíme z toho, že pro uživatele je programování PSG po-
mocí povelů v Basicu běžné.
    Nyní se budeme zabývat tím, jakse dá PSG řídit přímo pomocí
povelů OUT. To se může provádět jednak z Basicu povelem OUT@, 
jednak z programu ve strojovém jazyce.

         Např.:    LD A,3FH
                   OUT (F2H),A

    Výstupní port pro PSG je F2H.
    Povelem OUT F2H tedy může být zpřístupněn PSG. Aby se ale 
mohl vytvořit tón, musí se ještě ledacos udělat, protože PSG má 
přesný předpis, který udává, kde musí být který bit nastaven 
eventuelně nenastaven, aby mohl hrát určitý tón.
    Kromě toho je nezbytné vyslat více bytů po sobě (sériově),
aby se PSG mohla sdělit frekvence a hlasitost. Tak obsahují 
první dva byty data o výběru jednoho ze tří tónových generátorů
a o frekvenci. Výběr tónového generátoru a frekvence se tedy dělá
dvěma byty, které musí být na PSG vyslány sériově. Na první po-
hled to vypadá velmi komplikovaně, protože frekvence musí být 
udána v 10 bitech. Protože ale pro 1 byt může být přeneseno pouze
8 bitů, je nutně těchto 10 bitů rozdělit na dva byty.
    Přitom musí být bity rozděleny následovně:

         BYTE 1
    Sedmý bit prvního bytu by měl obsahovat 1. Tato "1" ukazuje
    PSG, že se jedná o první byte. Šestý, pátý a čtvrtý bit 
    udává, který třítónový generátor má být osloven. Třetí, dru-
    hý, první a nultý bit udává nižší hodnotu frekvence.

         BYTE 2
    Sedmý a šestý bit se nastaví na 0. 5-tý,4-tý,3-tí,2-hý,1-ní
    a 0-tý bit obsahují vyšší hodnotu frekvence.

    Můžeme si tedy představit 6 bitů z bytu 2 a 4 bity z bytu 1
 seřazeny za sebou do řady. Potom by to vypadalo asi takto:

                    BIT:  5 4 3 2 1 0 3 2 1 0
                          =========== =======
                             Byte 2    Byte 1

    Nyní se ale nabízí otázka, jak mají být bity vypočítány a
nastaveny. I toto je jednodušší než by se mohlo zpočátku zdát.
    Musíme dávat pozor na to, že deset bitů, které představují
frekvenci, neudává přímo hodnotu frekvence v Hz.
    Následující funkce objasňuje desetibitové (F10) číslo, které
musí být zvoleno, aby generátor hrál odpovídající frekvenci (FR).
                     F10 = 11094/(FR/10)
           
    Nakonec musíme číslo frekvence F10 přepočítat do 10 bitů.
Nyní příklad:
    Chceme spočítat 10 bitů,které jsou nutné k tomu,aby se vy-
tvořil tón o frekvenci 442 Hz. (442 Hz je přibližně frekvence,
kterou uslyíte zvednete-li telefon a uslyšíte oznamovací tón).
Nejprve dosadíme 442 do rovnice jako FR.

Tedy:
                    F 10=11094/(442/10)   dává 250,995
     
    Nyní musíme zaokrouhlit na celá čísla.

                     F 10=INT(F 10+.5)

Čili dostaneme pro F 10=251

    Těchto 251 nyní chceme přepočítat na 4 bitovou a 6 bitovou
část. 6-ti bitovou část dostaneme, vydělíme-li číslo F 10 šest-
nácti (což odpovídá 2^4).

Tedy:
                     LSB=F 10/16   dává 15,6875

     I teď nás zajímá pouze číslo před desetinou tečkou. Proto
jej vypočítáme podle následujícího vzoru:

                     LSB=INT(LSB)  dává 15

Šesti bitová část je tedy 15 nebo 2^0+2^1+2^2+2^3=1111
Těchto 1111 je ve dvojkové soustavě.

Jestliže chceme nyní spočítat 4 bitovou část, odřízneme deseti-
nou část a výsledek (v našem případě 0,6875) vynásobíme opět 16.

Tedy:
                     MSB=FRAC(LSB)x16   dává 11

Čtyřbitová část je tedy 11 nebo 2^0+2^2+2^3=1011
Těchto 1011 je ve dvojkové soustavě.

    Nyní jsme spočítali jak 4-bitovou část, tak i 6-ti bitovu 
část a to:
              LSB(4 bit)=11 (decimálně) nebo 1011 (dvojkově)  
              MSG(6 bitů)=15 (decimálně) nebo 001111 (dvojkově)

    Jestliže se vám tento výpočet zdá příliš komplikovaný, mů-
žete použít následující program v Basicu, který si nyní objasní-
me. Na začátku (po startu pomocí RUN) se program zeptá na frek-
venci v Hz, která má být rozložena. Výsledky jsou obsaženy 
v proměných B4(4 bitová část) a B6(6-ti bitová část).

              10 CLS  
              15 INPUT"ZADEJTE FREKVENCI V Hz";FR
              20 F0=11094/(FR/10) 
              30 B6=INT(F0/16)
              40 B4=(F0+.5)MOD 16
              50 IF FRAC(F0)=>.5F0=INT(F0)+1:ELSE F0=INT(F0)
              55 F0=INT(F0+.5)
              60 PRINT"6-TI BITOVA CAST";B6
              70 PRINT"4 BITOVA CAST";B4
              80 PRINT"F0 :";F0
              90 PRINT:PRINT:GOTO 15

    Vypočítejte nyní ručně LSB(4 bitové) a MSG(8 bitové) pro 
frekvenci f=109 Hz.
    Potom si přezkoušejte vypočtený výsledek pomocí výše uvedené-
ho programu. Pro 6-ti bitové číslo (MSB) vychází 63, pro 4 bi-
tové číslo (LSB) vychází 10. F0 je 1018.

    Nyní můžete frekvence posílat na PSG, ale ještě mu musíte
říci, kterým ze tří generátorů má funkci vytvořit.
    Nato přičteme k LSB(4 bitové číslo) v následujícím seznamu
uvedené číslo:

Tónový generátor 1: 128
Tónový generátor 2: 160 Tónový generátor 3: 192

    Chceme-li tedy spustit tónový generátor 2,přičteme k B4(LSB)
číslo 160. B6(MSB) zde zůstává nezměněn. Nyní to bude vypadat
takto:
      B4=B4+160  nebo  B4=11+160    dává 171

    Nyní musíme tyto dva byty (B4 a B6) poslat na PSG. K tomu
nám poslouží OUT, který můžeme použít i v Basicu např. formou:

      OUT@ 242,B4     242 má stejný význam jako
      OUT@ 242,B6     hexadecimální hodnota F2

    Jestliže tedy chceme vytvořit tónovým generátorem druhý tón
o frekvenci 442 Hz, jsou zapotřebí dva povely OUT a to:

      OUT@ 242,171
      OUT@ 242,15

    Nyní ještě neuslyšíme žádný tón,protože jsme ještě nedefino-
vali hlasitost. K tomu potřebujeme ještě jeden povel OUT. Povel
OUT pro nastavení tlumení si prosím vyberte z následující tabul-
ky. V tabulce jsou uvedeny i tlumící povely pro šumový generátor
o kterém budeme mluvit dále. Pro to co nyní popisujeme, nehraje
žádnou roli.

Tlumení   Generátor 1   Generátor 2   Generátor 3   Šum

  0           144           176           208       240
  1           145           177           209       241
  2           146           178           210       242
  3           147           179           211       243
  4           148           180           212       244
  5           149           181           213       245
  6           150           182           214       246
  7           151           183           215       247
  8           152           184           216       248
  9           153           185           217       249
 10           154           186           218       250
 11           155           187           219       251
 12           156           188           220       252
 13           157           189           221       253
 14           158           190           222       254
 15           159           191           223       255
 
    Když chceme náš tón o frekvenci 442 Hz nechat zaznít v 
plné hlasitosti, zadáme tlumení 0. To znamená, že má zaznít ne-
tlumený tón.

       OUT@ 242,176     176 odpovídá tlumení 0 pro tónový gene-
                        rátor 2

    Nyní už musí náš tón zaznít. Samozřejmě můžeme během tónu
tlumení měnit.

    Uděláme to následujícím programem:

       10 FOR I=176 TO 191
       20 OUT@ 242,I
       30 WAIT 500
       40 NEXT I
       50 FOR I=191 TO 176 STEP-1
       60 OUT@ 242,I
       70 WAIT 500
       90 NEXT I

    Tón bude pomalu tišší, a potom znovu hlasitější. Provádí se 
to takto: na řádce 10 necháváme I běžet od 176 do 191. To jsou 
hodnoty tlumení tónového generátoru 2 pro povel OUT ve stoupa-
jícím pořadí. Na řádce 20 potom toto tlumení jde přímo na PSG. 
Aby se rozdíl v hladitosti dal lépe vnímat, zpomalujeme program
na řádce 30 povelem WAIT 500. Díky tomuto povelu čeká program
půl vteřiny, a potom zvyšuje stupeň tlumení skokem na NEXT I na
řádce 40.
    Jestliže byla dosažena nejvyšší hodnota tlumení (tónový gene-
rátor vypnut), začne další smyčka stejným způsobem tlumení ubí-
rat. 
    Tomuto tlumení jako funkci času se všeobecně říká obalová 
křivka. Můžeme ji zvýraznit formou diagramu, ve kterém zakreslí-
me závislost hlasitosti na čase. 
    V posledním programu by obalová křivka vypadala následovně:

                  ^          :
                  |\        /:
                  | \      / :
        hlasitost |  \    /  :
                  |   \  /   :
                  |    \/    :
                 -|--------------->                              čas

    To znamená, že tón bude nejprve tišší a potom hlasitější.
Nyní tedy můžeme obalové křivky tónů libovolně měnit.
    To můžeme sice dělat i v BASICu, ale se syntaxí tohoto 
jazyka můžeme volit pouze 9 různých obalových křivek. Tyto možné
obalové křivky jsou také znázorněné v uživatelské příručce 
(OWNER'S MANUAL) na straně 6-80.
    Pomocí povelů OUT můžeme ale vytvořit úplně libovolnou oba-
lovou křivku. Získali jsme tedy značnou výhodu oproti programo-
vání se sadou povelů BASICu.
    Nyní můžeme vytvářet tóny na třech tónových generátorech o 
navzájem nezávislé frekvenci a hlasitosti. Dále se budeme zabývat
tím, jak může být detekován generátor šumu.
    Nejlepší možnost detekovat šumový generátor je detekovat 
třetí tónový generátor tou frekvencí, kterou má kmitat šumový
generátor. K tomu musíme ale nejprve vypnout hlasitost tónového
generátoru 3. To uděláme tak, že zvolíme maximální tlumení (po-
velem OUT@ 242,223).
    Nakonec můžeme již popsaným způsobem spočítat odpovídající
bity frekvence. Předpokládejme, že jsme B4(LSB) a B6(MSG), tedy 
4 a 6 bitová čísla, spočítali. Nyní přičteme 192 (tónový generá-
tor 3) k B4 (4 bit. číslo), a potom vydáme frekvenci v pořadí 
LSB,MSB. To všechno seprovádí podle již popsaného postupu.
    Nyní musíme PSG sdělit, že má frekvenci inicializovanou v ge-
nerátoru 3 považovat za šumovou frekvenci. Toho docílíme povelem
OUT@ 242,227. Pomocí tohoto povelu se vytvoří synchronní šumění.
    Dále můžeme pomocí PSG vytvořit i bílý šum, a to tím, že 
místo OUT@ 242,227 nyní vložíme OUT@ 242,231. Potom může být hla-
sitost měněna, jak je uvedeno v tabulce hlasitosti pod šuměním.
    Také zde může být samozřejmě vytvořeno mnoho libovolných oba-
lových křivek. Protože zde můžeme vytvořit synchroní šumění, máme
velkou výhodu oproti programování v BASICu povelem NOISE, který 
může vytvořit pouze bílý šum. Vyplatí se tedy řídit zvukový gene-
rátor povely OUT, protože získáváme možnosti, které se pomocí 
normálních povelů v BASICu nedají realizovat. 

    [POZN. Tyto možnosti se dají realizovat pomocí příkazu, který
v obecném manuálu není uveden. Je to příkaz SOUND=(X,Y). Je tedy 
nesmysl řídit zvuk příkazy OUT, protože to jde lépe a rychleji 
pomocí tohoto specifického SOUNDu a není-li to nutné, použijeme
příkazů MUSIC a NOISE, protože pracují přes přerušení.]

       Zvláštnosti:
         Mohou být zásadně hrány pouze tři tóny polifonně (sou-
    časně). Přitom nemůže být hrán více než jeden šumový tón.
    Můžeme tedy hrát současně maximálně tři normální tóny nebo
    dva tóny a jeden šumový tón.
         [POZN. Výhodné pro BASIC MZ-700,KU-BASIC,FORTRAN,Assem-
    bler apod. Ne pro BASIC MZ-800.]  


Kruhová modulace
----------------

    Kruhová modulace se dá vytvořit tím, že se nechá kmitat např.
tónový generátor 1 frekvencí od 200 do 1000 Hz a ve stejnou dobu
tónový generátor 2 frekvencí od 1000 do 200 Hz. To tedy znamená,
že frekvence (výšky tónů) běží protismyslně, jak je zřejmé z ná-
sledujícího diagramu:
             
                   ^
                   |
                   |\    - tónový generátor 1
                   | \  /
       frekvence   |  \/
                   |  /\
                   | /  \- tónový generátor 2
                   |/      
                  -|------------>
                           čas

Fázování
--------

    Abychom mohli vysvětlit pojem fázování, museli bychom odbočit
velice daleko - na samotnou stavbu kmitu. Vysvětlíme si tedy pou-
ze na příkladu, co znamená fázování. 
    Frekvence, kterou slišíme, není nic jiného, než kmitání. 
Jestliže kmitání probíhá asi tak, jak je zobrazeno na následují-
cím diagramu, jedná se o kmitání sinusové.


                   |
                   |
             U     |    ..                ..
              1    |   .  .              .  .
                +  |  .    .            .    .
                   | .      .          .      .  
                 0-|---------.--------.--------.---------------> 
                   |    t     .      .   t      .      .  čas
                -  |     1     .    .     2      .    .
                   |            .  .              .  .
             U     |             ..                ..
              0    |
                   |


    Na základě této křivky může být ledacos vyvětleno. Rozdíl me- 
zi U1 a U0 odpovídá hlasitosti tónu. Čím vyšší je tedy U1, tím
hlasitější je tón. 
    Frekvenci odpovídá čas, který proběhne mezi t1 a t2. Jestli-
že tyto hodnoty leží dále od sebe, nezmění funkce tak rychle 
znaménko. Frekvence je potom nižší. Jestliže hodnoty leží blíže
u sebe, je frekvence vyšší než v našem příkladě.
    Všeobecně se dá říci, že zvýšení frekvence vnímáme jako zvý-
šení tónu. Označíme-li čas mezi t1 a t2 jako "T" a frekvenci jako
"t", vychází následující vzorec: 
                        
                        f=1/T  nebo  T=1/f

    Jestliže tedy vytvoříme tón o frekvenci 400 Hz, potom víme,
že odstup mezi t1 a t2 je nyní 1/400 Hz, tedy 0.0025 sekund.
Abychom nyní vytvořili fázování, můžeme využít vlastnost, která
není popsána v žádné uživatelské příručce. Spustíme dva tónové 
generátory se stejnou frekvencí. Tzn., že při obou tónech je od-
stup mezi t1 a t2 stejný.
    Tónový generátor nechá křivku začínat v přesně stejnou dobu.
A tak dostáváme následující diagram.


                   ^
                   |
                   |    .. _             .._
                   |   .  . \           . /.\
                   |  .  / . \         . /  .\ 
                   | .  /   . \ t1 t4 . /    .\
                  -|---------.-\-----.-/------------------>
                   |       t3 . \   . / t2           čas
                   |           . \ . /
                   |            ..\_/
                   |             
                   |
                   |
 
     Jak vidíte, je doba, která uběhne mezi tím, než křivka pro-
běhne nulou t1 a t2 tónového generátoru 1 přesně rovna době t3 
a t4 tónového generátoru 2. Máme tedy stejnou frekvenci. Fáze
(průběhy frekvencí) jsou ale časově posunuty, a to o rozdíl mezi
t1 a t3. Tomuto efektu se říká fázování. Protože se tím získá ve-
lice zajímavý zvuk, vyplatí se to vyzkoušet. Posluchač totiž vní-
má v každé chvíli součet kmitů.
     Posunutí fází se ale mění také během hraní dvou stejných
tónů, takže dochází ke změně součtové křivky a tím také ke změně
hlasitosti. Myslitelný by byl také ten případ, že by oba kmity 
ležely u sebe následovně:


                   |
                   |       
                   |      ..        ..        ..
                   |     .  .      .  .      .  .  tónový gen. 2
                   |    .    .    .    .    .    .
                   |.  .      .  .      .  .      .
                   | ..        ..        ..        .
                  -|-.---------.----------.--------.------->
                   |.  .      .  .      .  .      . 
                   |    .    .    .    .    .    . 
                   |     .  .      .  .      .  .  tónový gen. 1
                   |      ..        ..        ..
                   |
                   |
                   |


    Potom by byl součet obou tónů v každé době roven nule. Nesly-
šeli bychom tedy žádný tón. To se také skutečně někdy stává.
    Abychom mohli všechno vyzkoušet a tónový generátor se mohl 
optimálně detekovat, je jak vidíme nutné velké množství progra-
mátorské práce.
    Proto na tomto místě doporučujeme program, který bravurně 
řeší všechny možnosti v tvoření hudby. Jmenuje se SYNTHY-800 
a je k dostání v každé prodejně BBG.
    Pomocí programu SYNTHY-800 může uživatel pomocí menu zadávat
celé posloupnosti tónů, ve kterých může být kdykoliv volně vlože-
na přes obrazovku jak frekvence, tak hlasitost. Grafická křivka 
je zobrazena na obrazovce pomocí dialogu s uživatelem.
    Může být vytvořen libovolný tón a může být uložen na libovol-
né paměťové médium (kazetu,RAM disk,quick nebo floppy disk). Tóny
nebo řady tónů mohou být potom znovu nahrány do paměti a měněny 
nebo zlepšeny. Mohou být najednou hrány až tři hudební sekvence.
Samozřejmě je detekovaný i šumový generátor. I úplní začátečníc
jsou s tímto programem schopni vytvářet dobře znějící hudbu. 
Člověk tedy nemusí být zvláštně muzikální, aby tento program 
mohl obsluhovat. Může být vytvořeno přes 20 000 různých tónů.
Hotové posloupnosti tónů s jedním nebo více tónovými generátory
mohou být vkládány do vlastních programů v BASICu i ve strojovém
jazyce.
    Tento rogram nabízí v oblasti tvoření hudby opravdu něco 
nového a otvírá bohaté možnosti. Program byl dokončen krátce 
před vydáním této knihy a může proto být u nás zakoupen.
    
    Následující dva programy v BASICu vám přináší trochu hudby.

	1 TEMPO 6
	10 FOR JT=1 TO 2
	20 FOR I=1 TO 10
	30 READ A$,B$,C$
	35 MUSIC A$;B$;C$
	40 NEXT I
	50 RESTORE "ENTRY"
	60 NEXT JT
	70 END
	100 DATA O3V15S0M10
	110 DATA O2V13S0M10
	120 DATA O2V11S0M10
	160 REM 
	170 DATA R9
	180 DATA D5E3#FA#F1EM4D3E
	190 DATA R9
	220 REM
	230 DATA R9
	240 DATA #F#FEEDR6
	250 DATA R9
	290 LABEL "ENTRY"
	299 REM
	300 DATA M10#F3AA5M20A7
	310 DATA M6#F5M13A7M4+#C0+D2A3
	320 DATA M6D5M20#F6M4R5
	325 REM
	330 DATA M10#F3AA5M20A7
	340 DATA M6D5M20#F7M4R5
	410 DATA M6#F5M13A7M4+#C0+D2A3
	415 REM
	420 DATA M10R3BAABBAA
	430 DATA R3M10B3A5M4B3RAA
	440 DATA V15-D5-D-D-D
	470 REM 
	480 DATA #F3ABGM18A7M10
	490 DATA #F3ABGAM10D1E#F5
	500 DATA -D-D-D-DV12
	530 REM
	540 DATA R3#FAA#FAAA
	550 DATA M5R3DM15#F5M10R3#F3AA
	560 DATA M5R3M15#F5M10R3D#F#F
	590 REM
	600 DATA B3B1+#C+D3EA7
	610 DATA R5M20D5D7M10
	620 DATA R5M20-B5-A7M10
	640 REM
	650 DATA R3+DA#FEBBB
	660 DATA M3R2D5M10R0R3M20E7M10
	680 DATA M3R1A5M10R4M20B7M10
	710 REM
	720 DATA +D3A1#FE5M14#F7M10
	730 DATA +D3R5#G0A2+D3+B+A+#F1+E
	740 DATA A3R3R7
	770 REM
	780 DATA R9
	790 DATA O3M10D5E3#F3M4A3M10#F1ED3M4E3
	800 DATA R9
	830 REM
	840 DATA R8+D5
	850 DATA M3#F3#FEEDR3+A5
	860 DATA M4+D3+DAA#FR3+#F5


	---------


	10 TEMPO 5
	20 DIM M$(3,10)
	30 FOR J=1 TO 3
	40 FOR I=1 TO 9
	50 READ M$(J,I)
	60 NEXT I,J
	70 FOR I=1 TO 10
	80 MUSIC M$(1,I);"O2"+M$(2,I);M$(3,I)
	90 NEXT I
	100 DATA O3V15S0M10
	110 DATA +C5B1+C+D+CBA+C3+C1A+C5B1+C
	120 DATA A1GEFG6R1FEDEFGAG6
	130 DATA A1BAGFEDEDC5C1DM6E3FM10
	140 DATA D5M20G9R4M10+D6+C1BAB+C+D+CB4
	150 DATA +C1BA+C1BAF4M5F1FF3A+C1ABD
	160 DATA F3F1FF3AM10B1GAF
	170 DATA D3D1CD6M5D1DD3FM10A1FGED3D1C
	180 DATA D6D1CD3E1FM15G7M10R1FEDC9 	190 REM
	200 DATA V10S0M10
	210 DATA E5D1CDCDFE3G1FE5D1C
	220 DATA F1ECDE6R1FEGCDEFE6
	230 DATA F1DECDGBGBG5C1GM6A3GM10
	240 DATA B5M20E9R4M10B6G1GFDEGEG4
	250 DATA E1GFEGFA4M5D1DA3FE1FGG
	260 DATA A3A1AC3FM10G1GFA
	270 DATA G3F1EB6M5D1FG3AM10C1GECB3G1E
	280 DATA B6G1ED3G1FM15E7M10R1DGGG9
	290 REM
	300 DATA O1V1S0M5
	310 DATA C3C1C0CC3C1C0CC3CCE1E0EE3E1E0E
	320 DATA C3C1C0CC3C1C0CC3CCC1C0CC3C1C0CG1G0GG1G0G
	330 DATA C3C1C0CC3CCC1C0CG3G1G0GG1G0G
	340 DATA C3C1C0CC3C1C0CG3GGG1C0CC3C1C0CC3C1C0C3C1C0CC3C1
	    C0CC3C1C0C
	350 DATA G3G1G0GG3G1G0GC3CCC1C0C
	360 DATA C3C1C0CC3CCC1C0C
	370 DATA G3C1E0EE3E1E0GG3GCG1C0CC3C1C0C
	380 DATA G3G1G0GG3G1G0GG3GCG1C0CC3C1C0CC3C1C0CC3C1C0CC1C0C


           QUICK DISK MZ - 1F11
           ====================

    Vše v následující se vztahuje na Quick disk model MZ - 1F11.
Nebudeme se zde blíže zabývat řízením Quick disku z BASICu, pro-
tože je dostatečně přesně popsáno v příruče Sharp. Mnohem více
Mnohem více bychom chtěli zdůraznit možnosti použití Quick disku
v programech napsaných ve strojovém kódu.

    Všeobecně:
    Pomocí od E000H do FFFFH ležící ROM(jen u MZ-800 a MZ-700,
když je připojen Quick disk) můžete nahrát na disk maximálně 34
souborů o max. 64 Kbytů. Systémem je sice na disk připuštěno až
50 souborů, ale vyrovnávací paměť pro adresář stačí jen pro 34  
souborů.Ale vy se pravděpodobně nikdy nedostanete do situace,aby
jste museli nahrávat více než 34 souborů na jeden Quick disk. Ty-
to soubory leží na Quick disku jako v dlouhém řetězu bytů, a ne
jako na normálních floppy discích, kde jsou rozděleny na sektory
a stopy. To má, ale bohužel za následek, že žádné jednotlivé
soubory nemohou být smazány nebo přehrány. Máte pouze možnost 
Quick disk nově formátovat a tím smazat všechny soubory.
    Standartní program E010H provádí kompletní řízení Quick disku
ale předtím musí být vždy zadáno příslušným kódem jakou operaci
má Quick disk provádět.
    Příslušná operace se vybírá řídícím kódem, který se předává
na paměťové buňce 1130H.
     

              Řídící a kontrolní kódy pro rutinu E010H.
              -----------------------------------------

    01  READY CHECK - kontroluje,zda je Quick disk připraven k 
                      nasazení. Jestliže není, je indikátor pře-
                      nosu nastaven na 1.
    02  FORMAT      - formátuje Quick disk
    03  READ        - čte blok dat (od záhlaví)
    04  SAVE        - ukládá blok dat na quick disk (od záhlaví)
    05  HEADPOINTCLEAR - nastavuje bod záhlaví na počáteční hod-
                      notu (inicializace)
    06  Vypíná motor

    Tento kód musí být předán na buňku paměti 1130H, než se zavo-
lá startovací program E010H.
    Bod záhlaví představuje hexadecimální kód, který se předává
na adrese 113DH, a tzv. označuje bod na quick disku, odkud má
čist nebo zapisovat. Pro READ(kód=3) a SAVE(04) je tento bod in-
terpretován jako počáteční bod a po čtení/zapsání je nově nasta-
ven.
    Standartní program předává v indikátoru přenosu zpět, zda
došlo k chybě. Jestliže je Cy=1, je v akumulátoru popsán druh 
chyby.

Akumulátor   Druh chyby                              Adr.zprávy

28H          not found err(soubor nebyl nalezen)      F290H
 
39H          bad disc err(disk není v pořádku)        F319H

2EH          write protect(disk s ochranou proti      F2D6H
                           psaní)

32H          not ready err(quick disk není připraven) F2E7H

35H          no file space err(už žádné místo na      F2F4H
                               disku)

36H          unformat err(disk není formátován)       F309H

2AH          already exit err(jméno souboru již       F2C4H
                              existuje)

33H          too many files err(příliš mnoho souborů  F2A2H
                                na disku)

00H          BREAK(přeruší pomocí SHIFT+BREAK)        F329H

Zbytek znamená - hard error                           F2B8H

    Od příslušné adresy zprávy je v ROM uloženo odpovídající
chybové hlášení v ASCII formátu a může být vytištěno na obrazovku
následujícím programem:

             LD    DE, `adresa zprávy`
             CALL  0006H
             CALL  0015H



              Stavba záhlaví quick disku.
              ---------------------------

    Záhlaví quick disku je velmi podobné záhlaví u startovacích
programů pro kazetu, a leží v oblasti od 10F0H do 112FH.

    Význam dat jednotlivě:

10F0H    kód souboru:01H u programů ve strojovém jazyce  "OBJ"

                     02H u programů v BASICu             "BTX"
                     
                     03H u souboru dat v BASICu          "BSD"
                     
                     04H u rozptýlených souborů BASICu   "BRD"

                     05H                                 "RB"

                     07H                                 "LIB"

                     0AH                                 "SYS"

                     0BH                                 "GR"

                     94H u textových souborů z TEXY      "TXT"

                     95H u souborů LISPu                 "LSP"

Poznámka:
        kódy 94H a 95H adresář monitoru nepozná, ale označuje je
        jako `???` soubor.

10F1H do 1101H   jméno souboru s koncovou značkou(0DH)

1104H            délka následujícího souboru

1106H            počáteční adresa bloku dat

1108H            adresa autostartu programu

Ostatní adresy oblasti záhlaví jsou nevyužity.

              Další užitečné podprogramy v ROM.
              ---------------------------------

EF27H            READY check      odpovídá E010H s (1130H)=01

F25FH            Headpoint clear  odpovídá E010H s (1130H)=05

E2E8H            Vypnutí motoru   odpovídá E010H s (1130H)=06

EEF7H            Filesearch
                 Hledá na disku soubor, jeho jméno je stejné
                 jako v adrese 11A3H. Jestliže jméno v 11A3 za-
                 číná 0DH (čili nebylo žádné jméno vloženo), vez-
                 me první soubor z disku. Nastaví se bod záhlaví
                 a záhlaví souboru se uloží od 10F0H po 112FH.
                 Při tomto se nebere v úvahu kód souboru(stojí
                 v 10F0H). Jestliže potřebujete, můžete ješté 
                 přezkoušet kód souboru. Filesearch musí být 
                 inicializován s F25FH (Headpoint clear). Při
                 novém zavolání filesearch bez nové inicializace
                 se hledá dále od místa, kde skončilo poslední
                 hledání. Jestliže filesearch narazí na chybu,
                 zastaví se na Cy=1.

                 Pozor: Mezi vyvoláním více filesearch nesmí mez
                 nimi uplynout příliš dlouhá doba, protože by 
                 z technických důvodů mohly být některé soubory
                 přeskočeny.Čas nestačí nnapříklad k zobrazení
                 jména souboru na obrazovce. Proto je pro adresář
                 také zapotřebí vyrovnávací paměť.

 EFA2H	File end search
	Hledá konec dat na quick disku,nastavuje bod záhlaví a 
	zkoumá, zda  eventuelně již není  soubor s tímto  jménem
	(v záhlaví od 10F1H maximálně 16 znaků + CR),nebo zda na
	disku není příliš mnoho souborů (max 50).Podprogram file
	end search se provede úspěšně bez chyby pouze tehdy,je-li
	nastaven Cy=1 a A=28H (not found).

Nyní k nejdůležitějším programům LOAD a SAVE, které se oba vyvo-
lávají přes E010H.

LOAD

Jak jsme se již nahoře zmínili, je LOAD inicializováno kódem 03
v (1130H). Mimo kódu a bodu záhlaví, který byl nastaven pomocí
file search, potřebuje LOAD ještě startovací adresu oblasti,
do které má být soubor nahrán, delku souboru k nahrání a další
kód, který je zapotřebí k rozpoznání datového souboru (k rozli-
šení od záhlaví).

Data quick disku:
			start. adresa na (1132H)
			délka         na (1134H)
			kód 03H       na (1130H) 			2.kód 01H     na (1131H)

SAVE

Save je popsán kódem 04 v 1130H a kódem 04 v 1131H
Kromě toho ještě musí být předána délka záhlaví 0040H, jeho star-
tovací adresa 10F0H, startovací adresa oblasti, která má být na-
hrána a její délka. Následující tabulka popisuje, kde musí být
data předána.

			kód           na (1130H) = 04
			2.kód         na (1131H) = 04
			zač.záhlaví   na (1132H) = 10F0H
			délka z.      na (1134H) = 0040H
			začátek DATA  na (1136H) 
			délka   DATA  na (1138H)

DATA znamená oblast k nahrání.

Teď ještě příklady k formátování, LOAD a SAVE.

Formátování:

	CALL	EF27H		;test je-li QD připraven
	JP	C,ERROR		;jestli Cy=1 error(not ready err)
	LD	A,02H		;kód pro formátování
	LD	(1131H),A	;kód odložit
	CALL 	E010H		;hlavní program QD
	JP	C,ERROR		;je-li Cy=1 tab.chyb.hlášení

LOAD:

	CALL 	EF27H		;test je-li QD připraven
	JP	C,ERROR		;je-li Cy=1 error(not ready err)
	LD	DE,EE65H	;text "jméno souboru ? "
	CALL	0006H		;posun řádky
	CALL	0015H		;výtisk textu
	CALL	0006H		
	LD	DE,11A3H	;vyrovnávací pamět pro jméno
				;souboru
	CALL	0003H		;vložit řádku
	LD	A,(DE)		;1 znak ve vyrovnávací paměti
	CP	1BH		;je-li break, pak error
	CALL	F25FH		;headpoint clear
	CALL	EEF7H		;hledání souboru
	LD	HL,(1104H)	;délka souboru (v záhlaví)
	LD	(1134H),HL
	LD	HL,(1106H)	;počáteční adresa souboru
	LD	(1132H),HL
	LD	HL,0103H	;kód 03 a 2. kód 01
	LD	(1130H),HL
	CALL	E010H		;hlavní program QD
	JP	C,ERROR
	CALL	E2E8H		;vypnutí motoru
	RET

SAVE

	CALL	EF27H		;test zda QD připraven
	JP	C,ERROR	
	LD	DE,EE65H	;text "jméno souboru ? "
	CALL	0006H
	CALL	0015H
	CALL	0006H
	LD	DE,11A3H	;vstupní vyrovnávací paměť
	CALL	0003H		;vložené řádky
	LD	A,(DE)
	CP	1BH
	JP	Z,ERROR		;viz nahoře
	EX	DE,HL		;vyr.paměť 11A3H do HL
	LD	DE,10F1H	;vyr.paměť pro jméno souboru
				;v záhlaví
	LD	BC,0010H	;max.délka jména souboru
	LDIR			;blokový přenos
	LD	A,0DH
	LD	(DE),A		;nastavit konec
	LD	HL,délka	;do HL vložit délku souboru
	LD	(1104H),HL	;uložit adresu do záhlaví
	LD	HL,start.adr.	;do HL vlozit startovací adresu
				;souboru
	LD	(1106H),HL
	LD	HL,Execute	;do HL vložit adresu aut.startu
	LD	(1108H),HL
	LD	A,01H		;kód pro cílový soubor
	LD	(10F0H),A
	CALL	F25FH		;headpoint clear
	CALL	EFA2H		;file end search
	JP	C,ERROR
	CP	28H		;kód pro "not found"
	JP	NZ,ERROR
	LD	HL,(1104H)	;délka
	LD	(1138H),HL
	LD	HL,(1106H)	;startovací adresa
	LD	(1136H),HL
	LD	HL,0404H	;kód 04 pro SAVE a 2. kód 04
	LD	(1130H),HL
	LD	HL,0040H	;délka záhlaví
	LD	(1134H),HL
	LD	HL,10F0H	;start záhlaví
	LD	(1132H),HL
	CALL	EO10H		;hlavní program
	JP	C,ERROR
	CALL	E2E8H		;motor vyp.
	RET

	Zde uvedené programy mohou běžet jako podprogramy. Musí
být ale ještě přidán chybový program, který potom vydává přísluš-
ná chybová hlášení.


		Řízení plottru ze strojového jazyka
		===================================

	Tato kapitola by vám měla umožnit řízení nestandartně 
připojeného čtyřbarevného plottru (MZ-1P16) ze strojového jazyka.
	Obsluha plotteru z Basicu je podrobně popsána v original,
SHARP příručce.Také ve strojovém jazyce si můžete jako v Basicu
vybrat mezi dvěma různými druhy provozu plotteru:

1) Grafický mód

V grafickém módu se dá plotterem kreslit nejrůznějším způsobem.

2) Textový mód

V textovém módu se mohou vytisknout pevně dané znaky (písmena,
číslice,zvláštní znaky).Tyto znaky se mohou vytisknout v různých
velikostech (26,40 a 80 znaků na řádek).
	Plotter má znaky uvedené v tabulce znaků plotteru (viz
SHARP příručka str.A-26).Jestliže se plotteru dá povel vytisknout
znak,který není v této tabulce, automaticky se vytiskne v další barvě
hexadecimální kód znaku.

	Standartní programy monitoru pro řízení plotteru.

V monitoru 1Z-013B jsou dva standartní programy pro říz. plotteru:

	a) CALL 018FH

Tento standartní program vydává obsah akumulátoru na plotter.
Obsah akumulátoru přitom může být řídící znak, nebo znak z tabulky
znaků.Před zavoláním tohoto standartního programu se musí do aku-
mulátoru uložit příslušný obsah.

	b)CALL 01A5H

Tento standartní program vydává na plotter jednotlivé byty řetězce
znaků.Řetězec znaků přitom může obsahovat řídící znaky, nebo znaky
z tabulky znaků.Řetězec musí být ukončen 0DH, a počáteční adresa
řetězce musí být uložena v registru DE.

	Oba standartní programy pro plotter mají stejný účinek:
vydávají jeden byte na plotter.Program 01A5H by se měl použít
jestliže chceme na plotter vyslat hodně bytů (znaků nebo říd.
znaků),jinak se používá program 018FH, který vydává pouze jeden
byte na plotter.


	Řízení plotteru ve znakovém módu
	--------------------------------

Po zapnutí MZ-800 je plotter automaticky ve znakovém módu.
Barva tisku je černá a tisková hlava je na levém okraji.
Pomocí obou programů pro řízení plotteru (CALL 018FH a CALL 01A5H)
se na plotter dají posílat různé řídící znaky a znaky z tabulky
znaků.

	Tabulka řídících znaků s příslušným účinkem

Řídící znak	Účinek

	01H	Přepíná plotter do znakového módu
	02H	Přepíná plotter do grafického módu
	03H	Posune o jednu řádku zpět
	04H	Test tiskárny (4 čtverce v různých barvách)
	0AH	Posune o jednu řádku vpřed
	0BH	Změna velikosti písma ze 40 na 26 znaků na ř.
	0CH 	  "       "       "      26    40     "
	0DH	Návrat vozíku 'CR'
	0EH	Tisková hlava se posune o pozici do leva
	0FH	Posun vpřed o stránku
	1DH	Změna barvy
09H,09H,09H	Změna velikosti písma ze 40 na 80 znaků na ř.
09H,09H,0BH	  "       "       "      80    40     "

	Příklady programů pro obsluhu plotteru ve znakovém módu.

Pomocí výše uvedených řídících znaků, znaků z tabulky znaků
a obou jmenovaných programů se nyní dají provádět různé funkce.

Program 1 :

	LD 	A,0BH		;26 znaků na řádek
	CALL 	018FH		;program monitoru pro výdej 
				;obsahu akumulátoru
	LD	A,42H		;znak 'B'
	CALL	018FH
	LD	A,42H		;znak 'B'
	CALL	018FH
	LD	A,47H		;znak 'G'
	CALL	018FH

Tento krátký program přepne plotter na 26 znaků na řádek
a potom vytiskne písmena 'BBG'
	Stejný program se dá realizovat také jinak, a to pomocí
druhého programu monitoru.

Program 2 :

	LD	DE,A000H	;počáteční adr. řetězce znaků
	CALL	01A5H		;program monitoru pro výdej
				;řetězce znaků

Přitom musí být v paměti od A000H následující :

	A000H	0BH 		;26 znaků na řádek
	A001H	42H		;znak 'B'
	A002H	42H		
	A003H	47H		;znak 'G'
	A004H	0DH		;značka konce řetězce


	Řízení plotteru v grafickém módu
	--------------------------------

	Následující program přepíná plotter ze znakového módu do
do grafického módu.

Program 3:

	LD	A,O2H		;řídící znak pro graf. mód
	CALL	018FH		;program monitoru pro výdej 
				;obsahu akumulátoru

	Po provedení tohoto programu se nacházíte v grafickém
módu. Řízení plotteru se provádí podobně jako ve znakovém módu.
Navíc jsou k dispozici specielní rídící povely a grafické povely.
pro řízení se též používají standardní programy monitoru 018FH
a 01A5H. Při některých grafických povelech se musí na plotter 
předat navíc k povelu hodnoty parametrů.

Všeobecně k hodnotám parametrů.

	Všechny hodnoty parametrů jsou decimální hodnoty a mohou
být maximálně trojmístné (stovky, desítky, jednotky). jestliže 
povel potřebuje více parametrů, jsou jednotlivé hodnoty parametrů
odděleny čárkou ( ASCII 2CH ). Jednotlivé číslice hodnot parametrů
se rovněž zadávají v ASCII formátu.

		Povely v grafickém módu.

a) povely bez parametrů

Povel	ASCII	Význam

A	41H	Návrat do znakového módu
H	48H	Zvedá hrot pera a posouvá tiskovou hlavu
     		do výchozí pozice
I	49H	Aktuální pozice tiskové hlavy je definována jako
		 výchozí pozice

b) povely s jedním parametrem

Povel	ASCII	Význam

C	43H	Změna barvy tiskové hlavy
		Tento povel musí následovat parametr o hodnotě
		0-3 (ASCII 30H-33H). 		0 = černá 	ASCII 30H
		1 = modrá	ASCII 31H
		2 = zelená	ASCII 32H
		3 = červená	ASCII 33H

		Násl. program provádí změnu barvy na červenou.

	LD	A,43H		;C - Povel
	CALL	018FH		;program monitoru
	LD	A,33H		;parametr pro červenou barvu
	CALL	018FH		;program monitoru

L	4CH	Určuje druh čáry (průběžná nebo tečkovaná)
		Tento povel musí následovat hodnota parametru
		mezi 0 - 15 (v ASCII formátu)
		0 = druh čáry - průběžná
		1 - 15 = tečkované druhy čar

		Násl. program určuje druh čáry 15.

	LD	A,4CH		;L - povel
	CALL	018FH
	LD	A,31H		;desítková část hodnoty parametru
				;v ASCII formátu
	CALL	018FH
	LD	A,35H		;jednotková část   "        "
	CALL	018FH

Q	51H	Určuje směr ve kterém má být vytištěn znak
		Po tomto povelu musí následovat hodnota parametru
		mezi 0 až 3 (ASCII 30H až 33H).

		0 = vzpřímené
		1 = doprava ležící
		2 = na hlavě stojící
		3 = doleva ležící

S	53H	Určuje velikost znaků.
		Po tomto povelu musí následovat hodnota parametru
		mezi 0 a 63 (v ASCII formátu).

		Následující program mění velikost znaků na 60.

	LD	A,53H		;S - povel
	CALL	018FH	 	LD	A,36H		;desítkové číslo param. 60
	CALL	018FH
	LD	A,30H		;jednotkové číslo param. 60
	CALL	018FH

c) povely se dvěma parametry

Povel	ASCII	Význam

D	44H	Kreslí čáry počínaje aktuální pozicí tiskové hlavy
		na udané souřadnicové body až po konečný bod
		(Xn, Yn). D X1,Y1,X2,Y2,....,Xn,Yn kreslí čáru
		od aktuální pozive kursoru k bodu (X1, Y1),
		z tohoto bodu do bodu (X2, Y2) až do koncového
		bodu (Xn, Yn).Hodnota prvního parametru 
		(X - pozice ) musí ležet mezi -480 a 480.
		Hodnota druhého parametru (Y - pozice ) musí
		ležet mezi -999 a 999.Hodnoty parametrů musí být
		odděleny čárkou ( ASCII 2CH).Po poslední hodnotě 
		parametru musí následovat označení konce 0DH.

		Následující program krslí čáru z aktuální pozice
		tiskové hlavy do bodu (-20, 20):

	LD	A,43H		;D-povel
	CALL	018FH
	LD	A,20H		;" - " znak v ASCII
	CALL	018FH
	LD	A,32H		;desítkové místo X hodnoty v ASCII
	CALL	018FH
	LD	A,30H		;jednotkové   "       "        "
	CALL	018FH
	LD	A,2CH		;čárka (oddělení hodnot obou par.)
	CALL	018FH
	LD	A,32H		;desítkové místo Y hodnoty v ASCII
	CALL	018FH
	LD	A,30H		;jednotkové   "         "       "
	CALL	018FH
	LD	A,0DH		;označení konce dat
	CALL	018FH

J	4AH	Kreslí čáry, počínaje aktuální pozicí tiskové 
		hlavy do relativními souřadnicemi daného bodu
		(X1, Y1) až do koncového bodu (Xn, Yn).
		Povel "J" je jako takový identický s povel "D",
		ale u povel "D" se udávají absolutní souřadnice
		a u povel "J" relativní.
		X hodnoty parametru musí ležet mezi -480 až 480.
		Y    "        "      "     "     "  -999 až 999.
		Hodnoty parametrů jsou navzájem odděleny čárkou
		(ASCII 2CH) a musí být ukončeny 0DH.
		Jinak viz. povel "D".

M	4DH	Zvedá hrot pera a posouvá tiskovou hlavu do bodu
		(X, Y).Po povelu musí následovat dva parametry,
		které jsou odděleny čárkou (ASCII 2CH).
		X hodnoty parametru musí ležet mezi -480 až 480.
		Y    "        "       "     "    "  -999 až 999.
		Oba parametry musí být ukončeny 0DH.
		Následující program posouvá tiskovou hlavu
		na pozici (-1, 123).

	LD	A,4DH		;M povel
	CALL	018FH
	LD	A,2DH		;minus znak v ASCII
	CALL	018FH
	LD	A,31H		;jednotkové místo X hodnoty 
				;parametru v ASCII
	CALL	018FH
	LD	A,2CH		;čárka (oddělení hodnot param.)
	CALL	018FH
	LD	A,31H		;stovkové místo Y v ASCII
	CALL	018FH
	LD	A,32H		;desítkové  "       "
	CALL 	018FH
	LD	A,33H		;jednotkové "       "
	CALL 	018FH
	LD	A,0DH		;označení konce dat
	CALL	018FH

R	52H	Zvedá hrot pera a posouvá tiskovou hlavu
		do pozice bodu (X, Y).Povel "R" je jako takový
		identický s povelem "M", ale při povelu "M"
		se zadávají absolutní souřadnice a s povelu "R"
		relativní .
		X hodnoty parametru musí ležet mezi -480 až 480.
		Y    "        "       "    "     "  -999 až 999.
		Hodnoty parametru jsou odděleny čárkou
		(ASCII 2CH) a musí být ukončeny 0DH.
		Jinak viz. povel "M".

d) povely se třemi parametry

Povel	ASCII	Význam

X	58H	Tento povel kreslí kartézský systém souřadnic.
		První hodnota parametru musí být buď 0 nebo 1.
		Při 0 se kreslí Y-ová osa, při 1 se kreslí X-ová.
		Druhý parametr je měřítkový faktor a musí ležet
		mezi -999 až 999.
		Třetí parametr obsahuje počet značek na osu,
		a musí ležet mezi 1 až 255. 
		Tento povel jinak odpovídá povelu AXIS v Basicu.
		Při dalších otázkách viz. též příručka SHARP.
		Jednotlivé hodnoty parametrů musí být odděleny
		čárkou a ukončeny 0DH.

e) povely s různým počtem parametrů

Povel	ASCII 	Význam

P	50H	Tento povel vytiskne znak.Tento povel musí 
		následovat alespoň jeden parametr.
		Vytištěné znaky se udávají v ASCII kódu jako
		hodnoty parametrů. Jednotlivé hodnoty parametrů
		nemusí být odděleny, ale za posledním znakem musí
		následovat 0DH jako označení konce.
		Následující program vytiskne písmena BBG.

	LD	A,50H		;P povel
	CALL	018FH
	LD	A,42H		;"B"
	CALL	018FH
	LD	A,42H		;"B"
	CALL	018FH
	LD	A,47H		;"G"
	CALL	018FH
	LD	A,0DH		;označení konce
	CALL	018FH

	Kombinace více povelů ve znakovém a grafickém módu.

a) znakový mód

Ve znakovém módu mohou být jednotlivé povely spolu spojeny bez oddělení.

Příklad programu:

	LD	A,01H		;znakový mód
	CALL	018FH
	LD	A,0FH		;posun o stránku
	CALL	018FH
	LD	A,09H		;přenutí na 80 znaků/řádek
	CALL	018FH
	LD	A,09H
	CALL	018FH
	LD	A,09H
	CALL	018FH
	LD	A,42H		;"B"
	CALL	018FH
	LD	A,42H		;"B"
	CALL	018FH
	LD	A,47H		;"G"
	CALL	018FH
	LD	A,0DH		;označení konce
	CALL	018FH

b) grafický mód

V grafickém módu musí být povely, jenž musí být ukončeny pomocí
0DH odděleny čárkou (ASCII 2CH). Přitom 0DH odpadá.
Ale na konci, po posledním povelu, musí být udáno 0DH.

Příklad programu:

	LD	A,02H		;grafický mód
	CALL	018FH
	LD	A,49H		;I povel
	CALL	018FH		
	LD	A,4CH		;L povel
	CALL 	018FH
	LD	A,30H		;spojitý druh čáry
	CALL	018FH		
	LD	A,43H		;C povel
	CALL	018FH
	LD	A,32H		;zelená barva
	CALL	018FH
	LD	A,4AH		;J povel
	CALL	018FH
	LD	A,31H		;"1"
	CALL	018FH
	LD	A,30H		;"0"
	CALL	018FH
	LD	A,30H		;"0"
	CALL	018FH
	LD	A,2CH		;čárka
	CALL	018FH
	LD	A,2DH		;minusové znaménko
	CALL	018FH
	LD	A,32H		;"2"
	CALL	018FH
	LD	A,30H		;"0"
	CALL	018FH
	LD	A,31H		;"1"
	CALL	018FH
	LD	A,2CH		;čárka
	CALL 	018FH
	LD	A,30H		;"0"
	CALL	018FH
	LD	A,2CH		;čárka
	CALL	018FH
	LD	A,30H		;"0"
	CALL	018FH
	LD	A,2CH		;čárka (oddělení poslední
				;hodnoty parametru a povelu "H")
	CALL	018FH
	LD	A,48H		;H povel
	CALL	018FH
	LD	A,41H		;A povel
	CALL	018FH
	LD	A,0DH		;označení konce
	CALL	018FH

Tento program přepíná plotter do grafického módu.
Potom se určí momentální pozice tiskové hlavy jako nový počátek.
Další povel určuje druh čáry. Následující povel udává barvu.
Potom se udělá čára mezi relativním bodem (100, -201) a bodem
(0, 0).Nakonec se tisková hlava posune do původní pozice 
a plotter se přepne do znakového módu. Tyto programy se dají 
uspořádat mnohem lépe pomocí druhého standartního programu
monitoru 01A5H. Pro přehlednost ale byly napsány se standartním
programem 018FH.


		JOYSTICK
		========

	Tato kapitola se věnuje obsluze joysticku.
Joystick se připojuje vzadu na rozšiřující liště. Přes povel 
IN A,(F0H) se do akumulátoru ukládá informca zda se s joystickem
hnulo nebo ne. Je možné zjistit zda bylo s joystickem pohnuto
do osmi různých směrů. Přitom dává joystick při nestisknuté 
klávese pro střelbu následující hodnoty:

		nahoře

	FAH	FEH	F6H
vlevo	FBH	FFH	F7H	vpravo
	F9H	FDH	F5H

		dole


Nyní hodntoy při stisknuté klávese pro střelbu:

		nahoře

	EAH	EEH	E6H
vlevo	EBH	EFH	E7H	vpravo
	E9H	EDH	E5H

		dole


	Bitový vzor akumulátoru se dá rozluštit,aby se dalo 
zjistit, jestli se s joystickem hnulo nebo ne.

Bit  0  :obsahuje  0  , když se s joystickem hnulo nahoru
bit  1  :   "      0  ,   "  "       "         "   dolů
bit  2  :   "      0  ,   "  "       "         "   doleva
bit  3  :   "      0  ,   "  "       "         "   doprava
bit  4  :   "      0  ,   "  "  stiskne klávesa pro střelbu
bit  5 - 7  "    vždy  1

	Když je tedy stisknuta klávesa pro střelbu a joystick 
je tlačen doleva, jsou bity 2 a 4 nastaveny na 0, ostatní 
jsou v 1. Potom vychází následující vzor bitů : 11101011 = EB
hexadecimálně ( viz. tab.). Potom napíšeme ještě program,
který analizuje joystick z Basicu. Musí být vyvolán povelem
USR ($5700).

	Na následujících adresách jsou obsaženy hodnoty  pro pohyb joysticku:

5800H:	 hodnota pro joystick nahoru	1=nahoru  0=neobsaženo
5801H:       "    "     "     dolů	1=dolů    0=     "
5802H:       "    "     "     doleva	1=doleva  0=     "
5803H:       "    "     "     doprava   1=doprava 0=     "
5804H:       "    "  klávesu střelby    1=stisk.  0=nestisknuto

Nyní tedy příslušný program, který musí být vyvolán jako pod-
program ve strojovém jazyce : 

5700 DB F0	IN	A,(F0H)		;hodnota z joy. 1
5702 2F		CPL			;komplementace hodnoty
5703 21 FF 57   LD	HL,57FFH	
5706 06 05	LD	B,06		;smyčka pro 5 hodnot
5708 23		INC	HL
5709 F5		PUSH	AF		;zachraň akumulátor
570A E6 01	AND	01		;maskování posledního
					;bitu
570C 77		LD 	(HL),A		
570D F1		POP	AF		
570E 0F		RRCA			;otáčej akumulátor
570F 10 F7	DJNZ	5708
5711 C9		RET

	Samozřejmě mohou být volány 2 joysticky. Pricip volání
druhého joysticku je analogický k volání prvního joysticku.
Ale místo port F0H musí být použit port F1H.


		RAMDISK MZ-1R18
		===============

	Ramdisk MZ=1R18 je hardwarový přídavek, který přpojuje
64k bytový disk. Tento ale není přímo přístupný, ale je 
adresovatelný pouze přes porty. Z-80 CPU tuto oblast také může
adresovat. Na to se musí napsat podprogram, aby se na adresu
na ramdisku dala napsat ev. přečíst nějaká hodnota. Adresa 
by měla být v HL, příslušná hodnota musí být v akumulátoru.
K tomu malý příklad :

-Program pro psaní na ramdisk

1200 F5		PUSH 	AF
1201 C5		PUSH 	BC 1202 6F		LD	A,L
1203 44		LD	B,H
1204 0E EB	LD	C,EBH
1206 ED 79	OUT	(C),A
1208 C1		POP	BC
1209 F1		POP	AF
120A D3 EA	OUT	(EAH),A
120C C9 	RET

-Program pro čtení z ramdisku

1210 F5		PUSH 	AF
1211 C5		PUSH	BC
1212 6F		LD	A,L
1213 44		LD	B,H
1214 0E EB	LD 	C,EBH
1216 ED 79	OUT     (C),A
1218 C1		POP	BC
1219 F1		POP	AF
121A DB EA  	IN	A,(EAH)
121C C9		RET

Důležitý je program, kterým se dá přenést oblast z paměti
do libovolné oblasti ramdisku.

	K tomu jsou zapotřebí tři hodnoty:

a) počáteční adresa bloku v paměti	(HL registr)
b)    "        "      "   v ramdisku	(DE registr)
c) délka bloku.

Používáme přitom již napsaný program, který píše 1 byte na adresu
v ramdisku. Chceme například oblast od 2000H do 3000H napsat
na ramdisk od adresy 0000H

	Zde program k tomu:

2000 21 00 20	LD	HL,2000H	;počáteční adresa v paměti
2003 11 00 00   LD	DE,0000H 	;   "        " v ramdisku
2006 01 00 10   LD	BC,1000H	;délka bloku
2009 1A		LD	A,(HL)
200A E5		PUSH	HL		;zachraň HL
200B D5		PUSH    DE		;HL = DE
200C E1		POP	HL
200D CD 00 12	CALL	1200H		;napiš obsah akumulátoru
					;na ramdisk
2010 E1		POP	HL
2011 23		INC	HL
2012 0B		DEC     BC
2013 13		INC	DE
2014 78 	LD	A,C		;BC = 0 ?
2015 B1		OR	C
2016 C2 09 20   JP	NZ,2009H	
2019 C3 AD 00   JP	00ADH		;skok do monitoru

Nyní chceme tento blok z ramdisku opět načíst do paměti.Potře-
bujeme znovu ty samé tři parametry, ale tentokrát má být blok 
přenesen na adresu 7000H v paměti. Také tentokrát použijeme znovu
podprogram, který čte 1 byte z ramdisku.

2020 11 00 70	LD	DE,7000H	;poč.adresa v paměti
2023 21 00 00   LD 	HL,0000H	; "     "   v ramdisku
2026 01 00 10	LD	BC,1000H	;délka bloku
2029 CD 10 12	CALL	1210H		;čti byte z ramdisku
202C 12		LD	(DE),A
202D 23		INC	HL
202E 13		INC 	DE
202F 0B		DEC 	BC
2030 78		LD	A,B		;BC = 0 ?
2031 B1		OR	C
2032 C2 29 20	JP	NZ,2029H	;když ne, čti dál
2035 C3 AD 00	JP	00ADH		;skok do monitoru

	Tyto podprogramy lze bez úprav vložit do vašich
programů. Musíte jen v každém programu změnit adresu bloku.


	Přepínání paměti (stránkování paměti)
	-------------------------------------

MZ-800 má různé paměti, které leží vzájemně paralelně. Tyto
mohou být přes přepínání paměti (stránkování paměti) vypínány
ev. zapínány. Protože CPU je adresovatelný pouze na 64k bytů
je toto přepínání nezbytností. Normálně se toto provádí pomocí
určitých povelů IN a OUT. Důležité je, že program pro přepínání
paměti nesmí být v té oblasti kde se přepínání provádí. Výsledek
by zpravidla bylo zhroucení programu. Nyní se podívejme
co jednotlové povely IN a OUT způsobují :

a) OUT  (CEH),A
 Jestliže byla předtím do akumulátoru vložena hodnota 8H,
přepne se MZ-800 do módu MZ-700. Při uložení jiných hodnot 
v akumulátoru (možno pouze 0 až 7) přepne se MZ-800 do speci-
fického grafického módu. K tomu blíže v kapitole o grafice.

b) OUT  (E0H),A

Při tomto povelu OUT se oblast paměti 0000H-8000H přepne jako
RAM. Zbytek paměti se nezmění.

c) OUT  (E1H),A

Zde jsou opět dva módy:

   1) MZ-700 mód (přes LD A,8H OUT (CEH),A)
Oblast od D000H do FFFFH se zapojí jako RAM.

   2) MZ-800 mód
Oblast od E000H do FFFFH se zapojí jako RAM.

d) OUT  (E2H),A

Oblast od 0000H do FFFFH se zapojí jako RAM.

e) OUT  (E3H),A
   1) MZ-700 mód
Oblast od D000H do DFFFH se zapojí jako VRAM.
Aktivuje se horní monitor od E000H do FFFFH.

   2) MZ-800 mód
Aktivuje se pouze horní monitor ROM.

f) OUT  (E4H),A
   1) MZ-700 mód
Oblasti 0000H-1000H a E000H-FFFFH se zapojí jako ROM.
Aktivuje se VRAM od D000H do DFFFH. Tento mód odpovídá módu
MZ-80 K.

   2) MZ-800 mód
Oblasti 0000H-1000H a E000H-FFFFH se zapojí jako ROM.
Oblast od 1000H do 1FFFH se aktivuje jako CGROM.
Aktivuje se vysoká rozlišitelnost VRAM od 8000H nahoru
(podle rozšíření grafické paměti). Zbytek paměti je RAM.

g) OUT  (E5H),A 
Jako OUT  (E1H),A ale příslušná oblast se zcela odpojí.

h) OUT  (E6H),A

Jako OUT  (E5H),A , ale návrat ke stavu před zabráněním přístupu.

i) IN   A,(E0H)

Aktivuje uvnitř OUT (E4H) módu grafiku.

j) IN   A,(E1H)

Vypíná grafiku uvnitř OUT  (E4H) módu.

	Nyní bychom k tomuto chtěli uvést příklad.ROM Monitor
MZ-800 má být přemístěn z ROM do paralelní RAM. Potom budeme mít
software monitor, který můžeme libovolně měnit.

Nejprve program :

1200 21 00 00	LD	HL,0000H	;počáteční adresa ROM
					;monitoru
1203 11 00 20	LD	DE,2000H	;volná oblast v paměti
1026 01 00 10   LD	BC,1000H	;délka ROM monitoru
1209 E5		PUSH 	HL		;zachraň HL
120A C5		PUSH 	BC		;   "    BC
120B D5		PUSH 	DE		;   "    DE
120C ED B0	LDIR			;přenos do volné paměti
120E E1		POP	HL		;HL=2000H
120F C1		POP	BC		;BC=1000H
1210 D1		POP	DE		;DE=0000H
1211 D3 E0	OUT	(E0H),A		;zapoj oblast 
					;0000H-1000H jako RAM
1213 ED B0	LDIR			;přenes do RAM monitor
1215 C3 AD 00	JP	00ADH		;horký start RAM monitoru

Pro vysvětlení.Nejprve přeneseme ROM monitor, který leží v oblasti
od 0000H-1000H do volné oblasti paměti od adresy 2000H. Potom
zapojíme oblast od 0000H do 1000H jako RAM a přeneseme sem program
ROM monitoru a odstartujeme ho.

	Je těžké uvnitř oblasti 0000H-1000H a E000H-FFFFh, když
jsou tyto zapojeny jako RAM vyvolat podprogramy jako 0015H,
protože tyto podprogramy potřebují mód provozního systému MZ-80 K.
Musí se buď upravit software nebo vytvořit specielní podprogramy.
Mimochodem můžete, chcete-li, manipulovat pouze s RAM monitorem.
Každou buňku paměti v oblasti 0000H-1000H můžete změnit M-povelem.


		HARDWARE
		========

	Součást MZ-800 je díl 8255.8255 je zodpovědný za obho-
spořadování magnetofonu a klávesnice. Obrázek dole představuje 
adresování a způsob provozu dílu portů

____          _____________
C5E0   ------!            !-------\  PA
             !            !-------/    0...7
  A0   ------!            !
             !            !
  A1   ------!            !
             !            !/------   PB
D      -----\!            !\------     0...7
 0...7 -----/!            !
             !            !
             !            !-------\  PC
             !            !-------/    0...3
  __         !            !
  MW   ------!            !/------   PC
 ___         !            !\------     4...7
 EMR   ------!____________!


	Druh provozu, používaný v MZ-800 zobrazuje obr.1. Port A
je nastaven na výstup, port B na vstup a na portu C jsou čtyři
vedení s nižší hodnotou nastaveny na výstup, čtyři s vyšší
hodnotou jsou nastaveny na vstup. Toto se provede pomocí 
CONTROLWORD 8AH (pomocí řídícího slova 8AH). Pomocí tohoto 
řídícího bytu musí být nastaven mód (druh provozu), než se 
s tímto dílem pracuje. ROM monitorprogram toto provádí pomocí
standartního programu 073EH.

	Úplný výčet druhů provozu najdete v následující tabulce.

Tabulka 1 : Řídící slova pro 8255 v módu 0 (adresa E003H)
		A = výstup	E = vstup

     + Řídící slovo (bit)+   port A  +  port B  +  port  C
Hex  +	7 6 5 4 3 2 1 0  + všechny b.+všechny b.+4-7.b.+0-3.b.
--------------------------------------------------------------
80   +  1 0 0 0 0 0 0 0  +	A    +     A    +   A  +  A
81   +  1 0 0 0 0 0 0 1  +      A    +     A    +   A  +  E
82   +  1 0 0 0 0 0 1 0  +      A    +     E    +   A  +  A
83   +  1 0 0 0 0 0 1 1  +      A    +     E    +   A  +  E
88   +  1 0 0 0 1 0 0 0  +      A    +     A    +   E  +  A
89   +  1 0 0 0 1 0 0 1  +      A    +     A    +   E  +  E
8A   +  1 0 0 0 1 0 1 0  +      A    +     E    +   E  +  A
8B   +  1 0 0 0 1 0 1 1  +      A    +     E    +   E  +  E
90   +  1 0 0 1 0 0 0 0  +      E    +     A    +   A  +  A
91   +  1 0 0 1 0 0 0 1  +      E    +     A    +   A  +  E
92   +  1 0 0 1 0 0 1 0  +      E    +     E    +   A  +  A
93   +  1 0 0 1 0 0 1 1  +      E    +     E    +   A  +  E
98   +  1 0 0 1 1 0 0 0  +      E    +     A    +   E  +  A
99   +  1 0 0 1 1 0 0 1  +      E    +     A    +   E  +  E
9A   +  1 0 0 1 1 0 1 0  +      E    +     E    +   E  +  A
9B   +  1 0 0 1 1 0 1 1  +      E    +     E    +   E  +  E

	Nyní musíme ještě řídící slovo předat do 8255. Na to
si musíme ještě blíže prohlédnout adresy dílů.
Adresuje se pomocí C5E0, A0 a A1. Tím je detekovatelný adresami
E000H až E003H. Každá z těchto adres má určitý význam (CS = 
chip select - výběr chipu )

	E000H		adresa pro port A
	E001H		   "    "   "   B
	E002H		   "    "   "   C
	E003H		   "	"   "   řídící slovo

Tyto adresy slouží společně s MW pro psaní a s EMR pro čtení.
Psaní znamená výstup, čtení vstup.


		Testování klávesnice
		--------------------

Porty A a B slouží k testování klávesnice. K tomu se přes výstup
portu A posílá na sloupce 1 - 10 matice klávesnice (viz.obrázek
klávesnice v dodatku ), postupně L potenciál. Při každém nařízení
řádku se na vedení řádku 1 - 18 zkoumá, zda L potenciál přes ma-
tici prošel nebo ne. Z bodu kde se křižuje vedení řádků a sloupců
se dá potom zjistit, která klávesa byla stisknuta. Tento druh
testování klávesnice se též nazývá SCANNEN. 

	Samozřejmě nemusí být vždy testována celá klávesnice,
ale je též možne testovat pouze určité klávesy (nebo též
netestovat) jako v programy monitoru standartní program 001EH.

	Vysvětleme si na základě krátkého programu spolupůsobení
hadrware a software. Při tom je nutno mít na zřeteli, že zde
uvedená možnost testování klávesnice je realizovatelná, když
E oblast v paměti není zapojena jako RAM ale jako KEY TIMER
v oblasti od E000H až E070H (druh provozu MZ-80K). 

	Nejprve se na port A nastaví číslo sloupce, který má být
testován (=8) pomocí :

	LD	A,F8H		3E F8
	LD	(KEYPA),A	32 00 E0

Pro stabilizaci se přidá NOP. Potom se přes port B vnese zpět
informace o řádkách 11 až 18 pro sloupec 8.

	NOP			00
	LD	A,(KEYPB)	3A 01 E0

Nastaví se počátečná hodnota Carry bitu (bit přenosu) a dolu
na bit 0 (SHIFT)

	OR	A		B7
	RRA			1F
	JP	C,?BRK2		DA 89 09

Je-li stisknuta klávesa SHIFT, nastaví se indikátor přenosu na 0
a pomocí dvojnásobného posunutí doleva se BREAK bit přenese
do indikátoru přenosu a nastane BREAK.

	RLA			17
	RLA			17
	JR	NC,?BRK1	30 04		;SHIFT & BREAK
						;CY = 0

Jestliže BREAK nebylo stisknuto, uloží se do akumulátoru hodnoty
pro klávesu SHIFT (bit 6 = 1 ) , nastaven indikátor přenosu 
a skočí se zpět.

	LD	A,40H		3E 40
	SCF			37
	RET			C9

Jestližé bylo stisknuto BREAK, vymaže se indikátor přenosu,
nastaví se Z-flag a skočí se zpět.

	XOR	A		AF
	RET			C9

Tento program tedy sdělí výsledek testování pomocí stavu flagů
a bitů 4 - 6 v akumulátoru. Při tom znamenají :

a) 	Z=1		bylo stisknuto SHIFT & BREAK
b) 	D6=1 & Cy=1	  "      "     SHIFT
c)	D5=1 & Cy=1	  "      "     CONTROL (CTRL)
d)      D4=1 & Cy=1	  "      "     SHIFT & CONTROL

V předcházejícím oddíle bylo provedeno testování zvláštních
kláves jako např. SHIFT & BREAK pomocí specielního programu.
Výsledek testování byl vyjádřen pomocí flagů. Ve většině
případů ale má být testována celá klávesnice a výsledek testo-
vání by měl být jako hodnota v registru. Zde SHARP používá
specielní, pro klávesy upravený kód, zobrazovací kód. Tato tab.
kódů ale bohužel v uživatelské příručce vůbec není otištěna.
V dodatku této knihy najdete tab. zobrazovacích kódů.
Vlastní testování klávesnice se provádí standartním programem
monitoru 0A50H. Výsledek testování je  k dispozici v registru BC.
Při tom registr B obsahuje stav zvláštních kláves, tj. byla-li
stisknuta klávesa SHIFT, BREAK, CTRL atd. To odpovídá zobrazení
výsledných hodnot našeho posledního programu, čili když Z = 1,
bylo stisknuto SHIFT & BREAK atd. Registr C obsahuje bod křížení
čili řádku a sloupec, kde bylo zjištěno stisknutí klávesy. Obsah
C se dá interpretovat jako následující :

		X X S S S Z Z Z

	X = nepoužito
	S = číslo sloupce
	Z = číslo řádku

Přitom dává např. testování stisknuté klávesy "A" v registru 
C hodnotu 20H nebo při stisknutí klávesy "B" hodnotu 21H.
Program testování klávesnice monitoru nebere v úvahu sloupec 
10 = F9H. Tím nemohou být z monitoru testovány klávesy funkcí.
Následující program ve strojovém jazyce testuje klávesy funkcí
F1 až F5 a potom provádí skok na předem naprogramovanou adresu.

FKLAVESA:	LD	A,F9H
		LD	(KEYPA),A
		NOP
		LD	A,(KEYPB)
		CPL
		OR	A
		RET	Z
		EXX
		LD	D,00H
		LD	B,00H

FT1:		INC	B
		RLCA
		JR	NC,FT1
		LD	A,B
		RLCA
		LD	E,A
		LD	HL,FLEI-2	;od adresy FLEI leží tab.
					;skoků pro F1 až F5.
					;Adresu a data skoků mu-
					;síte zvolit sami
		ADD	HL,DE
		LD	C,(HL)
		INC	HL
		LD	B,(HL)
		POP	AF
		PUSH	BC
		EXX
		RET

Dejte pozor na to, že při provádění tohoto navrženého programu
má testování F klávesy funkci GET. Program tedy proběhne pouze
jednou, t.zn. že se nečeká na stisknutí klávesy.Jestliže neby-
la stisknuta žádná F klávesa, vrátí řízení programu na hlavní
program se Z-flag = 0.


	Řízení kazetového magnetofonu
	-----------------------------

	Kazetový magnetofon je řízen přes C port 8255. Tím má
adresu E002H. Port C se nastavuje řídícím slovem 8AH pro 8255.
Bity 0-3 pracují pro směr výstupu, bity 4-7 pro vstup.
Než mohou být data vydána ev. přečtena z magnetofonu, musí se
spustit motor. To se může udělat pouze ručně stisknutím 
PLAY nebo RECORD & PLAY. Procesor se ale ptá programem monitoru
'MOTOR' z adresy 069FH přes 4.bit portu C, zda motor běží.
Tento prgram monitoru potom zkouší spustit motor řídícím impulsem
na 3.bit portu C. Tento pokus má ale úspěch pouze tehdy, je-li
PLAY a RECORD & PLAY ještě stisknuto a motor byl zastaven pod-
programem 'MSTOP' na 0700H.Tím se dá motor pomocí software 
pustit a zastavit. To je důležité zvláště tehdy, když programy
ev. bloky dat musejí být nejprve zpracovány, než může být pře-
čten další blok dat. Vlastní nahrání bitů na magnetofon se provádí
vždy přes bit 1 portu C. Nahrání programu je tedy vždy ve dvouch
dílech, informačnim díle a v datech. Data jsou vlastní obsah
programu,informační díl (označovaný též jako záhlaví) se skládá z:

	1.kód souboru		1 byt pro rozlišení druhu programu
	2.jméno programu	16 bytů+1 byt označení konce
	3.délka dat		2 byty
	4.počáteční adresa dat  2 byty
	5.prováděcí adresa	2 byty
	  (startovací adresa)
	6.komentář 		104 bytů
	  (bez praktického
		významu)

Program pro zapsání z pracovní paměti se podle toho skládá vždy
ze dvou dílů.
	1.Zapsání informační části (záhlaví). Tuto úlohu provádí
	  standartní program monitoru "WRI" na adrese 0021H
	2.Zapsání dat. Tuto úlohu vyřizuje program monitoru "WRD"
	  na adrse 0024H.

Než se odstartuje program pro zápis na kazetu, musí tedy být
v oblasti paměti 10F0H až 116FH připravena data pro informační 
část. Tato data se potom standartního programu monitoru "WRI"
zapíší na pásek jako záhlaví. Pro čtení z kazety přes 5.bit 
portu C se nejprve do této oblasti paměti nahraje informační
část (záhlaví) a z něj se potom převezmou řídící data 
pro čtení dat.
